2013-12-10 5 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.class, 첫 번째 익명 내부 클래스에는 Winning$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은 그렇게합니다. 나의 철학은 "가능한 일을 할 수있는 가장 단순한 일을 한 다음"거기에서 쌓아 올리는 것입니다. 그리고 장난감 예를 넘어서는 가장 단순한 것은 보통 표준 도구입니다.) –