2013-12-10 16 views
1

我正在使用Tomcat 7並且正在學習JSP。我正在嘗試在具有特定擴展名的目錄中構建文件列表。我發現this tutorial,我有以下代碼:爲什麼使用匿名類獲得ClassNotFoundException?

package winning; 

import java.io.File; 
import java.io.FileFilter; 
import java.util.List; 
import java.util.ArrayList; 

public class Winning { 
    public List<String> getNames(String directory, String extension){ 
     final String ext = extension; 
     File f = null; 
     File[] names; 
     List<String> results = new ArrayList<String>(); 

     f = new File(directory); 

     FileFilter filter = new FileFilter() { 
      @Override 
      public boolean accept(File pathname){ 
       return true; 
      } 
     }; 

     names = f.listFiles(filter); 

     for(File file : names){ 
      results.add(file.getName()); 
     } 

     return results; 
    } 
} 

表示Tomcat呈現唯一的例外是NoClasDefFoundError,但報告說,一個ClassNotFoundException是在FileFilter filter = new FileFilter...線被拋出。

我的代碼工作完全正常,如果我擺脫塊的,所以我有:

... 
f = new File(directory); 
// used to be code here 
names = f.listFiles(/*no more filter*/); 
... 

看起來對我來說,基本上有相同的代碼作爲例子,但它不工作。本教程是否真的過時了,或者有沒有辦法在這裏使用匿名類?

+0

請發佈堆棧跟蹤。 –

回答

4

當您編譯包含匿名類的類時,會生成多個.class文件。例如,對於第一個匿名內部類,您將擁有頂級類Winning.classWinning$1.class

如果您只將Winning.class放入/WEB-INF/classes,那麼當代碼嘗試加載匿名類時,您會得到一個ClassNotFoundException

+0

這實際上就是它的位置(好吧,'/ WEB-INF/classes/winning /')。 Ooooohhh!啊啊。我寫了一個腳本來手動將'Winning.class'從我的源代碼目錄複製到'/ winning /'文件夾。因爲它沒有複製* Winning $ 1.class' *爲什麼它不起作用。修改我的腳本以轉儲其他類文件完美。謝謝! –

+0

@WayneWerner不客氣。考慮(在現實生活中,而不是測試一個小功能)使用標準的構建系統,如Maven,甚至是你的IDE,將複製類文件給你。 –

+0

這是非常好的建議,IRL我也是這麼做的。我的理念是「做最簡單的事情,可能有用」,然後從那裏建立起來。除了一個玩具例子,最簡單的東西通常是一個標準工具;) –

相關問題