2014-06-09 3 views
-1

에게 내 코드를 발생사용하여 패키지 이름은 NoClassFoundException

java.lang.NoClassDefFoundError: Bar (wrong name: Foo/Bar) 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(Unknown Source) 
at java.security.SecureClassLoader.defineClass(Unknown Source) 
at java.net.URLClassLoader.defineClass(Unknown Source) 
at java.net.URLClassLoader.access$100(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 
Exception in thread "main" 

: 나는 다음과 같은 슬로우합니다

java Bar 

그것을 실행하려고 내가 그것을 이런 식으로 실행하려고 할 때 :

자바 Foo.Bar을

나는이를 얻을 것이다 :

Error: Could not find or load main class Foo.Bar 

난 다음 작업을 수행 할 때 동일한 출력이 생성됩니다

java -classpath ./ Foo.Bar 

내가 현재 경로의 전체 경로를 지정할 때도 필요하다고 생각하지는 않지만 여전히 메시지를 geht : "찾거나로드 할 수 없습니다 ...". 다음과 같이 실행 다음

//before: 
./Bar.java 

//after adding Foo package: 
./Foo/Bar.java 

: 당신이 패키지 Foo를 추가 할 때

+1

후 폴더 구조와 명령을 실행하고있는 폴더를 선택합니다. –

+0

Bar.class는이 파일 하나 밖에 없으며 폴더 구조는 무엇을 의미합니까? –

+0

코드를 변경 한 후에 코드를 다시 컴파일 했습니까? 'Foo' 폴더가 나타 났습니까? 'java -classpath ./Foo.Bar' 명령을 호출하는 곳에서? – Pshemo

답변

4

, 당신은 또한 폴더 구조를 변경해야

./java Foo.Bar 

(참고 : 당신이 . 디렉토리에 있어야하지 ./Foo)

확인 : http://docs.oracle.com/javase/tutorial/java/package/managingfiles.html

위의 링크에서

인용 한 :

//in the Rectangle.java file 
package graphics; 
public class Rectangle { 
    ... 
} 

Then, put the source file in a directory whose name reflects the name of the package to which the type belongs:

.....\graphics\Rectangle.java 
+0

좋아, 나는 다음과 같이 내 폴더 구조는 지금, 그랬어 : /Foo/Bar.java 및 을 오라클 문서는, 또한 컴파일 설명처럼 /Foo/Bar.class 하지만 난 그것을 실행하려고 할 때 , 그것은 동일한 noclassdeffound 예외를 던질 것입니다. 또는 Foo로 cd하고, java Foo.Bar를 입력하면 "Error : 메인 클래스 Foo.Bar을 찾을 수 없거나로드 할 수 없습니다." –

+0

Foo로 cd하지 마십시오. Foo 디렉토리와 동일한 디렉토리에 있어야합니다. 내 편집 된 응답을 참조하십시오. – Dariusz

+0

감사! 그것은 도왔다! –

관련 문제