2011-05-08 3 views
1

NetBeans의 Java 프로젝트에서 작업 중이며 프로젝트 실행 버튼을 누르면 완벽하게 실행됩니다. 그러나 터미널에서 프로그램을 실행해야합니다. 나는 클래스 파일, search.class 들어있는 디렉토리를 열어, 나는 오류 얻을 그러나.class 파일이있을 때 Java NoClassDefFoundError

java search 

으로 실행 시도 :

Exception in thread "main" java.lang.NoClassDefFoundError: search (wrong name: search/search) 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 

나는 내 인생이 이유를 알아낼 수 없기를 해당 디렉토리에 search.class가 있으므로 "잘못된 이름"이라고 표시됩니다. 내 유일한 생각은 내 프로그램에서 호출하는 .jar 파일 (같은 디렉토리에 있음)이며 아마도 런타임에 포함시킬 필요가 있다는 것입니다.

도움이 될 것입니다.

편집 : 따라서 .jar 파일을 포함하지 않으면 문제가 발생한 것으로 나타났습니다. dist/폴더로 이동하여 전체 프로젝트가 jar로 패키징되어 java -jar search.jar로 실행되도록 수정했습니다.

감사합니다.

+3

이 클래스는 패키지에 있습니까? 수업의 이름은 무엇입니까? 수업의 서명을 보여줄 수 있습니까? 이것이 시작하는 줄입니다 ... public class MyClass {'클래스는 어떤 패키지입니까? –

답변

2

NoClassDefFoundError의 전형적인 이유는 클래스의 정적 초기화 프로그램에서 발생하는 예외입니다.

+2

이제는 클래스 파일 내부의 클래스 이름이 패키지를 포함한 클래스 파일의 이름과 일치하지 않을 때도 발생할 수 있습니다. –

+1

그건 내 의심이고, 그 일반적인 이유는 패키지 이름을 올바르게 사용하지 않기 때문입니다. –

3

클래스가 패키지에 포함되어있는 경우 클래스의 전체 이름을 전달해야합니다.

package org.example; 

public class Search { 
    ... 
} 

당신은 차례로 Search.class가 위치한 example 디렉토리를 포함 org 하위 디렉토리를 포함해야

java org.example.Search 

현재 디렉토리로 실행해야합니다. -cp 매개 변수를 사용하여 클래스 파일의 위치를 ​​지정할 수 있습니다.

관련 문제