2009-09-28 3 views
0

NoClassDefFoundError에 관한 많은 게시물이 있습니다. 모두 jar 파일에 관한 것 같습니다. 나는 이클립스에서 자바에 익숙하지만, 왜 대학 측에서 뭔가를 부러 뜨리지 않는 한, 내가 할 수있는 가장 단순한 것이 작동하지 않는 이유에 대해 매우 분실했다.대학에서 bash의 Java가 NoClassDefFoundError와 함께 실패합니다.

public class hello { 
    public static void main (String args[]) { 
      System.out.println ("Hello World!"); 
    } 
} 

이이 던져 전체 hello.java 프로그램이다.

Exception in thread "main" java.lang.NoClassDefFoundError: hello/java 
Caused by: java.lang.ClassNotFoundException: hello.java 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
Could not find the main class: hello.java. Program will exit. 

$의 CLASSPATH =/:는/usr/자바/최신/lib 디렉토리 :/홈/41/MyUserName 에다/빈

java -verbose hello.class 

을 제공합니다

 
[Opened /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.Object from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.io.Serializable from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.Comparable from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.CharSequence from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.String from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.reflect.GenericDeclaration from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.reflect.Type from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.reflect.AnnotatedElement from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.Class from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
... 
[Loaded sun.misc.AtomicLong from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
... 

을 EXC로 다시 선택.

 
java -version 

을 제공합니다

 
java version "1.6.0_10-rc2" 
Java(TM) SE Runtime Environment (build 1.6.0_10-rc2-b32) 
Java HotSpot(TM) Server VM (build 11.0-b15, mixed mode) 
+0

@ Joachim 당신은 어떻게 멋진 스크롤 상자를 만들었습니까? 내 게시물을 편집하는 데 사용 된 마크 업을 볼 수있는 방법이 있습니까? 나는 또한 그것을하는 방법을 배우고 싶다. – Maslow

답변

3

을 나는 당신이 당신이 실제로 첫번째 클래스?

javac hello.java 
java hello 
를 컴파일 않았다 가져
+0

자바가 컴파일 된 언어가 아닌 것 같습니다. – Maslow

+0

@Maslow : 물론 그것은 컴파일 된 언어입니다. 그것은 바이트 코드로 컴파일됩니다. –

+0

확실히 그렇습니다.하지만 당신이 척하고 싶다면 그루비를 보아도 좋습니다. – Henry

9

첫째, javachello.javahello.class 파일을 생성하기 위해 사용하여 .java 파일을 컴파일합니다. 그런 다음 javahello 명령을 사용하여 클래스를 실행하십시오. java 명령을 사용할 때는 .class 확장자를 포함하지 마십시오. helloHello해야한다 -

또한, 나는 그것이 클래스 이름은 대문자로 시작 컨벤션 것을 지적하고 싶습니다.

+0

예 저는 C# 클래스의 대문자에 익숙합니다. 문제의 경우 대문자로 이름을 바꾸려고했습니다. – Maslow

+0

java hello가 컴파일되지 않을 때까지 작동하지 않습니다. 컴파일 단계를 놓쳤으며 .java와 .class의 차이를 알지 못했습니다. – Maslow

2
java -verbose hello.class 

...이 "이봐, 자바 클래스 'hello.class'의 main() 메소드를 실행합니다.

자바라는 이름의 클래스를 찾을 수 없습니다"를 의미 hello.class "를. 당신의 클래스는 "안녕하세요"라고합니다. 이후

java -verbose hello 

'.' 당신의 클래스 경로에, 자바는 './hello.class'의 '안녕하세요'클래스를 찾을 수

추가 팁 :..이 대문자로 수업을 시작하는 자바에서 기존의

public class Hello { 

이 도움이 나머지 코드 클래스 참조 및 변수 참조를 구별 할 수 있습니다.

Dessert dessert= new Dessert("tiramisu") 
+2

사막은 디저트의 하위 클래스입니까? ;-) –

+0

Ooops. 얼마나 어색한 지. 고정. – slim

+0

@slim - java hello가 컴파일되지 않을 때까지 작동하지 않습니다. 컴파일 단계를 놓쳤으며 .java와 .class의 차이를 알지 못했습니다. – Maslow

관련 문제