2010-12-17 7 views
1

나는 자바 초보자입니다. 저는 Eclipse를 사용하여 간단한 Java 클래스 (NewHelloWorld)를 테스트했으며 콘솔에서 정상적으로 실행됩니다. 내가 터미널에서 같은 일을하려고 할 때, 제대로 컴파일 (오류를 포기하지 않고 HelloWorld.class를 생성), 그러나 java NewHelloWorld 내가 또한 java -classpath . NewHelloWorld하려고 다음과 같은 오류터미널에서 자바 파일을 실행할 때 java.lang.NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError: NewHelloWorld (wrong name: org/kodeplay/kodejava/NewHelloWorld) 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:634) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:73) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:212) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
    Could not find the main class: NewHelloWorld. Program will exit. 

하지만 나던 작품으로을 보여줍니다 잘 동일한 오류를 제공합니다.

이들은

환경 변수의 값은 다음과 같습니다

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" 
JAVA_HOME="/usr/lib/jvm/java-6-openjdk" 
CLASSPATH="/usr/lib/jvm/java-6-openjdk/lib:." 

아무것도 다른 필요한가 아니면 내가 여기에 무엇을 놓치고? 감사

PS : 우분투 10.04를 사용하여 바탕 화면

답변

9

잘못된 이름 : 조직/kodeplay/kodejava/NewHelloWorld

cd 당신이 폴더에있을 수 있도록 포함하는 패키지 루트까지 org 폴더 및 다음을 수행하십시오.

java -cp . org.kodeplay.kodejava.NewHelloWorld 
+0

오 : 현재 세션 내 bash는 CLASSPATH에 현재 디렉토리를 추가 한 후, 클래스 패스 규정하지 않고,

java -cp . HelloWorld 

또는 .. 알았다. 고마워요 – naiquevin

+1

당신은 천만에. – BalusC

+0

+1 짧지 만 완전한 대답입니다. –

4

오류 메시지는 단서를 제공합니다 :

(wrong name: org/kodeplay/kodejava/NewHelloWorld) 

클래스가 org.kodeplay.kodejava.NewHelloWorld 인 것처럼 보입니다. Java 명령 행은 다음과 같이 정규화 된 클래스 이름을 알아야합니다.

java -cp . org.kodeplay.kodejava.NewHelloWorld 

트릭을 수행해야합니다.

+0

http://meta.stackexchange.com/questions/15775/do-you-delete-your-own-answer-when-its-a-duplicate – BalusC

+1

@BalusC : * 답변 *과 * 설명*. "Java 커맨드 라인은 완전한 클래스 이름을 알아야합니다"라는 설명은 설명입니다. 나는 이것이 이것을 중복으로 생각하지 않는다. –

1

패키지 루트 디렉토리로 이동 (org의 상위 디렉토리) 및 실행

java -cp .:$CLASSPATH org.kodeplay.kodejava.NewHelloWorld

또한 내가 (.bashrc, .bash_profile 또는 /etc/profile에) 영구적으로 내 CLASSPATH.를 생각하지 않을 수는 있습니다 원하지 않는 행동으로 이어질 수 있습니다.

0

cd 루트 패키지까지. 대부분의 경우 Eclipse IDE에서 만든 경우 프로젝트의 src 폴더가됩니다.

java -cp . org.kodeplay.kodejava.NewHelloWorld

java org.kodeplay.kodejava.NewHelloWorld

도 작동해야 작동합니다. 나는 두 가지 모두 시도하고 두 경우 모두 잘 작동합니다.

0

HelloWorld 프로그램을 Mac OS X에서 텍스트 편집기로 작성 했으므로 비슷한 문제가있었습니다. 홈 디렉토리에서 실행 나는 두려워한 NoClassDefFoundError 있어요.

나는대로 실행 중 문제를 해결할 수 있음을 찾았습니다

export CLASSPATH=. 
관련 문제