2009-09-28 19 views
0

我知道有很多關於NoClassDefFoundError的帖子,他們似乎都在談論jar文件。雖然我對eclipse中的java很滿意,但我爲什麼不能運行它,爲什麼最簡單的東西不能正常工作,除非他們在大學方面破壞了某些東西。在大學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/JAVA /最新/ lib目錄:/家庭/ 41 /名爲myusername/bin中

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 2009-09-28 13:45:41

回答

3

我想你你實際編譯類第一?:

javac hello.java 
java hello 
+0

我認爲java不是一種編譯語言。 – Maslow 2009-09-28 13:41:00

+0

@Maslow:當然它是一種編譯語言。它被編譯爲字節碼。 – 2009-09-28 13:45:00

+0

它肯定是 - 但如果你想假裝不是你可以看看groovy。 – Henry 2009-09-28 13:46:49

9

首先,使用javachello.java產生hello.class文件編譯.java文件。然後,使用命令javahello執行該類 - 使用java命令時,不包括.class擴展名。

此外,我想指出的是,大會的名稱以大寫字母開頭 - hello應該是Hello

+0

是的我已經習慣了C#中的類的大寫字母,我試着將它重命名爲大寫字母,以防出現問題。 – Maslow 2009-09-28 13:39:56

+0

java hello不起作用,直到它被編譯顯然我錯過了編譯步驟,並且不知道.java和.class – Maslow 2009-09-28 13:43:39

2
java -verbose hello.class 

...表示「嘿,Java的,運行在類 'hello.class' 的main()方法。

的Java不能找到一個名爲類 「hello.class」。您類叫做「你好」。

java -verbose hello 

由於'。'是在你的classpath,Java將找到」 ./hello.class'的「你好」類

額外提示:。這是在Java中傳統與大寫字母開頭類

public class Hello { 

這有助於在你的代碼的其餘部分類引用和變量引用來區分。

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

之間的區別是Desert是Dessert的子類嗎? ;-) – 2009-09-28 13:35:09

+0

Ooops。多笨拙。定影。 – slim 2009-09-28 13:37:48

+0

@slim - java hello不起作用,直到它編譯顯然我錯過了編譯步驟,並不知道.java和.class之間的區別 – Maslow 2009-09-28 13:42:53