Compiler-Fehler FileFilter

HimBromBeere

Top Contributor
Malzzeit,

habe mir gerade mal versch. FileFilter angesehen und für ungenügend erachtet. Ich möchte versch. Filter mit verschi. Beschreibungen, das mache ich mit:
Java:
JFileChooser fc = new JFileChooser();
fc.addChoosableFileFilter(new FileFilter{...});
Soweit klar.
Um nun aber nicht für jeden Eintrag eine neue Klasse erstellen zu müssen, hab ich mir ´nen eigenen FileFilter geschrieben, das sieht so aus:
Java:
public class AppTest {

	public static void main(String[] args) {
		
		// display a data store file chooser dialog for shapefiles
        JFileChooser fc = new JFileChooser();
        fc.addChoosableFileFilter(new MyFileFilter("ESRI Shapefiles", "shp"));
        //...
        }

	private class MyFileFilter extends FileFilter {
		
		String description;
		String[] extensions;
		public MyFileFilter(String description, String ... extension) {
			this.description = description;
			this.extensions = extension;
		}
		
		@Override
		public String getDescription() {return this.description;}
		
		@Override
		public boolean accept(File f) {
			if (f.isDirectory()) return true;
			
			String fileName = f.getName();
			String extension = fileName.substring(fileName.lastIndexOf(".") + 1);
			for (String ext: this.extensions) {
				if (ext.equals(extension)) return true;
			}
    		
			return false;
		}
	}
	
}

Also kann ich auf meinem FileChooser sowas machen:
Java:
fc.addChoosableFileFilter(new MyFileFilter("ESRI Shapefiles", "shp"));
fc.addChoosableFileFilter(new MyFileFilter("DBF-Files", "dbf"));
fc.addChoosableFileFilter(new MyFileFilter("Comma seperated files", "csv"));
Denkste... ich bekomme nämlich folgende Fehlermeldung, die ich noch nie irgendwo gesehen hab:
Code:
No enclosing instance of type AppTest is accessible. Must qualify the allocation with an enclosing instance of type AppTest (e.g. x.new A() where x is an instance of AppTest).
Das Ganze geht jedoch, wenn ich nicht eine Instanz von MyFilter übergebe, sondern eine annonyme Klasse (also mitels
Code:
new FileFilter{...}
).

Hat dazu mal schnell jemand ´ne Idee, wo der Fehler herkommt?
 
Zuletzt bearbeitet:
G

Gast2

Gast
Deine innere Klasse ist nicht static. Daher brauchst du eine Instanz von AppTest um eine neue MyFileFilter Klasse zu erstellen.
Java:
new AppTest().new MyFileFilter()

Aber ich sehe eigentlich keinen Grund warum die Klasse an AppTest gebunden sein sollte, mach die doch einfach static?
 
S

SlaterB

Gast
Anmerkungen nebenbei:
"No enclosing instance of type" kann man wunderbar in Suchmaschinen suchen,

innere Klassen sind ein Lehrbuchkapitel und wären mit [c]class X {} [/c] leichter zu testen,
mit denselben Problemen wie deine 100fach kompliziertere Klasse

falls nicht klar ist dass es um die Objekterstellung geht, wäre wie immer Auftrennung von Zeilen angebracht
> fc.addChoosableFileFilter(new MyFileFilter("ESRI Shapefiles", "shp"));
-->
> MyFileFilter x = new MyFileFilter("ESRI Shapefiles", "shp");
> fc.addChoosableFileFilter(x);
Fehler in Zeile 1 oder 2?

die Fehlermeldung sagt letztlich genau aus was zu tun ist,
aber ok, das ist schwer zu lesen ohne komplettes Grundverständnis zu den inneren Klassen
 

Ähnliche Java Themen


Oben