# JFileChooser => Exc. in thread "Basic L&F File L



## norman (6. Mrz 2006)

Hallo zusammen,

kann mir jemand sagen, warum folgender code ausgeführt wird, dafür auch vllt 2 sek. braucht, dann aber ohne sichtbare 'ergebnisse' beendet wird? also der jfc wird nicht angezeigt..  ???:L 
	
	
	
	





```
public class Testklasse {
	
	public static void main(String[] args) {
		JFileChooser jfc = new JFileChooser();
		jfc.setVisible(true);
		jfc.setSize(250,250);
		File[] files = jfc.getSelectedFiles();
	}
}
```


----------



## The_S (6. Mrz 2006)

nicht setVisible, sondern showOpenDialog


----------



## norman (6. Mrz 2006)

hm..dann brauchts ja vorher schon einen jframe oder sowas. dächte, ich hab das schonmal ohne gemacht..naja.

danke


----------



## The_S (6. Mrz 2006)

Wenn du ansonsten nur die Konsole anzeigen lassen willst, dann funktioniert das hier auch:


```
import javax.swing.*;

class Chooser {
	
	public static void main(String[] args) {
		
		JFileChooser choos = new JFileChooser();
		choos.showOpenDialog(new JFrame());
	}
}
```

dann haste kein Frame o. ä. wo ansonsten noch angezeigt wird


----------



## norman (6. Mrz 2006)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> dann haste kein Frame o. ä. wo ansonsten noch angezeigt wird


den hatte ich jetzt so auch nicht (war wohl so genau so groß wie der jfc), aber das erspart wahrscheinlich JFrame#dispose()


----------



## norman (6. Mrz 2006)

norman hat gesagt.:
			
		

> Hobbit_Im_Blutrausch hat gesagt.:
> 
> 
> 
> ...


oder auch nicht. in dem falle beendet sich die applikation wieder nicht  ???:L  
	
	
	
	





```
private File chooseJavaFiles() {	
//		JFrame frame 	 	  = new JFrame();
		JFileChooser jfc 	  = new JFileChooser("C:\\eclipseworkspace");
		JavaFileFilter filter = new JavaFileFilter();
		jfc.setMultiSelectionEnabled(false);
		jfc.showOpenDialog(new JFrame());	// frame	
		jfc.setFileFilter(filter);
		jfc.addChoosableFileFilter(filter);
		
		File dat = jfc.getSelectedFile();
		System.out.println(dat);
				
//		frame.dispose();
		
		return dat;
	}
```


----------



## Roar (6. Mrz 2006)

jfc.showOpenDialog(null); :!:


----------



## The_S (6. Mrz 2006)

Roar hat gesagt.:
			
		

> jfc.showOpenDialog(null); :!:



Ich check jetzt grad gar nix mehr ... bin eigentlich auch davon ausgegangen dass das so funktioniert, habs ausprobiert und es ging net. Und jetzt gehts aufeinmal ...  :bahnhof:  :autsch:


----------



## norman (6. Mrz 2006)

hm. so wirklich logisch erscheint mir das zwar nicht, aber gut. 
jedenfalls noch was anderes:
mit dem jfc und dem entsprechendem filefilter gibt er bei nachfolgendem code zwar nur den dateinamen aus, wenn es sich um eine *.java handelt (sonst null), aber angezeigt werden im jfc alle dateien. check das nicht :/
FileView hat damit doch nichts zu tun, oder? 

```
private File chooseJavaFiles() {	
		JFileChooser jfc 	  = new JFileChooser("C:\\eclipseworkspace");
		JavaFileFilter filter = new JavaFileFilter();
		
		jfc.setMultiSelectionEnabled(false);
		jfc.showOpenDialog(null);	
		jfc.setFileFilter(filter);

		jfc.addChoosableFileFilter(filter);
        jfc.setAcceptAllFileFilterUsed(false);
	
		File dat = jfc.getSelectedFile();
		System.out.println(dat);
					
		return dat;
	}
```


```
public class JavaFileFilter extends FileFilter {

	@Override
	public boolean accept(File f) {
		
		String extension = getExtension(f);
		
		if ( f.isDirectory() || extension.equals("java") ) 
			return true;
		
		return false;
	}

	public static String getExtension(File f) {
        String ext = null;
        String s = f.getName();
        int i = s.lastIndexOf('.');

        if (i > 0 &&  i < s.length() - 1) {
            ext = s.substring(i+1).toLowerCase();
        }
        return ext;
    }
	
	@Override
	public String getDescription() {
		return "*.java only";
	}
}
```

[edit] und außerdem kommt der fehler:
Exception in thread "Basic L&F File Loading Thread" java.lang.NullPointerException
	at struktoGen.JavaFileFilter.accept(JavaFileFilter.java:14)
	at javax.swing.JFileChooser.accept(JFileChooser.java:1568)
	at javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run(BasicDirectoryModel.java:205) [/edit] ???:L


----------



## norman (7. Mrz 2006)

oh man  :autsch: 
der fehler war: zuerst muss der filefilter gesetzt werden, erst am schluss dann showOpenDialog() ..  :roll: 

trotzdem tritt der andere Fehler
_Exception in thread "Basic L&F File Loading Thread" java.lang.NullPointerException
	at struktoGen.JavaFileFilter.accept(JavaFileFilter.java:17)
	at javax.swing.JFileChooser.accept(JFileChooser.java:1568)
	at javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run(BasicDirectoryModel.java:205)_

immer dann auf, wenn ich zb. eine verzeichnisebene höher navigieren möchte. wo liegt hier aber das problem?
	
	
	
	





```
private File chooseJavaFiles() {	
		JFileChooser jfc 	  = new JFileChooser("C:\\eclipseworkspace\\StruktoGen\\struktoGen");
		JavaFileFilter filter = new JavaFileFilter();
		
		jfc.setMultiSelectionEnabled(false);
		jfc.setFileFilter(filter);
		jfc.addChoosableFileFilter(filter);
        jfc.setAcceptAllFileFilterUsed(false);
	
        jfc.showOpenDialog(null);	
					
        System.out.println(jfc.getSelectedFile());
		return jfc.getSelectedFile();
	}

[...]

public class JavaFileFilter extends FileFilter {

	@Override
	public boolean accept(File f) {	
		String extension = getExtension(f);
		if ( f.isDirectory() || extension.equals("java") ) 
			return true;
		return false;
	}

	public static String getExtension(File f) {
        String ext = null;
        String s = f.getName();
        int i = s.lastIndexOf('.');

        if (i > 0 &&  i < s.length() - 1) {
            ext = s.substring(i+1).toLowerCase();
        }
        return ext;
    }
	
	@Override
	public String getDescription() {
		return "*.java";
	}
}
```


----------



## flanker (7. Mrz 2006)

Und wenn die Datei ohne Windows-spezifische Endung ist?

```
//String ext = null;
String ext = "";
```


----------



## norman (7. Mrz 2006)

ouch..klar. danke


----------

