所以我有以下代碼:當一臺Unix機器上的Java程序中使用的FilenameFilter,收到的ClassNotFoundException
File txtFileDir = new File(MAIN_DIR + "test");
FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
};
File[] txtFiles = txtFileDir.listFiles(filter);
並能正常工作,使用Windows安裝Java 1.6的我的機器上。但是,當我將該類移植到unix盒時,它將運行並嘗試運行它,我在FilenameFilter行上得到一個ClassNotFoundException異常。 unix box上也有Java 1.6,所以我不知道這個問題會是什麼。這不是一個大問題,因爲有多種方法可以完成同樣的事情,但我只是好奇,如果有人有任何想法,爲什麼它不會在Unix上的工作。
我也嘗試編譯unix框上的代碼,以查看是否有任何區別,但沒有。該代碼編譯罰款unix框但我仍然收到相同的錯誤。任何人有任何想法?
UPDATE
我想通了這個問題。顯然,當我編譯帶有該類的代碼時,它創建了一個額外的.class文件,其中添加了我的類的名稱和$ 1。所以我有Test.class和Test $ 1.class。一旦我保持Test $ 1.class文件正常工作。我猜它需要第二個類文件,因爲我創建的內部類?至少我認爲這是一個內心階層。
無論如何,感謝您的幫助。
檢查
FilenameFilter.class
是否存在於rt.jar
中。安裝Java 6的事實並不重要。重要的是你用來運行程序的Java版本。 'java -version'會告訴你。 OTOH,FilenameFilter自JDK1.0起存在,所以你確定使用了java.io.FilenameFilter?什麼是確切的和完整的錯誤信息和堆棧跟蹤? –@JBNizet有效的點,但我使用Java 1.6。正如你所說,這個類從Java 1.0開始就已經存在了,所以它顯然就在那裏。我將添加確切的堆棧跟蹤。 – cardician