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

Neue Themen


Oben