2011-03-17 92 views
0

我嘗試通過執行以下操作從Windows XP CMD行創建並運行Java程序,該程序失敗。任何人都可以告訴我什麼看起來錯了/還有什麼要嘗試?無法從Windows XP命令行運行Java程序 - ClassNotFoundException

 
C:\> java -version 
java version "1.6.0_24" 
Java(TM) SE Runtime Environment (build 1.6.0_24-b07) 
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode) 

C:\> mkdir c:\j\ 
C:\> cd c:\j\ 
C:\j\> notepad Test.java 

(打開記事本,我插入下面的文本和保存,然後關閉。)

public class Test{ 
    public static void main(String[] args){ 
    System.out.println("hi"); 
    } 
} 

C:\j\> javac Test.java 
C:\j\> java Test 
Exception in thread "main" java.lang.NoClassDefFoundError: test 
Caused by: java.lang.ClassNotFoundException: test 
     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) 
Could not find the main class: test. Program will exit. 

真正的問題是,當我嘗試調試用Eclipse項目,我得到一個「無法創建Java虛擬機」的錯誤,並且我試圖在沒有IDE的情況下先測試編譯&以確保我的JDK安裝正常。


更新:你是正確的,CLASSPATH設置我的機器上,但是我仍然會得到一個異常。執行該建議的生產線生產:(。)

C:\j>java -cp . Test 
Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: Test) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClassCond(Unknown Source) 
     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$000(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) 
Could not find the main class: test. Program will exit. 

回答

4

它看起來像CLASSPATH環境變量設置你的機器上,並且該值不包括傳統的「點」代表當前目錄。你可以讓Java看起來像這樣:

java -cp。測試

(這是java空間破折號cp空間點空間測試)。

+0

感謝您的建議,請參閱原文中的「edit1」 – remington123 2011-03-17 02:56:16

0

此命令在屏幕上輸出什麼?

C:\j> ls 

如果你不能看到的Test.class,編譯程序,即再次javac Test.java,然後執行它java Test

的編輯: -

建議您不要用較小的創建類案例。請參閱Java coding convention。嘗試手動刪除Test.class。重新編譯代碼並再次運行。

+0

不,這個明確的y不是它 - 「錯誤的名字」消息意味着正在找到類文件。 – 2011-03-17 03:01:40

0

回答問題2,然後:您向我們展示的內容不是實際的剪切和粘貼。您遇到的問題是,用於命名Java源代碼中的「Test」類的字母大小寫以及您用來在命令行上調用該類的字母大小寫不匹配。根據錯誤信息,我會說源代碼中顯示「class Test」,但是您在命令行上輸入了「java test」。

+0

我一直在包括實際的剪切粘貼文本。該類將「.java」文件定義爲Test,並且大寫字母「T」。 「.java」文件是大寫「T」的「Test.java」。我試過同時運行: 「java -cp.test」 和 「java -cp.test」 兩者都產生相同的錯誤信息。 – remington123 2011-03-17 03:15:43

+0

也許當你編譯它時,你寫了javac test.java,而這個類文件現在叫做test.class? Windows在這方面是PITA。 – 2011-03-17 03:42:56

0

這不是一個真正的答案,因爲它不是所需的行爲,但是我的類已被定義(並且在命令行命令中用大寫字母「T」作爲「Test」引用,而且我看到運行時錯誤,說沒有找到帶有小寫字母「t」的類「test」 經過大量的試驗和錯誤之後,我將「Test.java」重命名爲「test.java」並編輯了源文件以定義然後我使用命令行命令「java test」重新編譯和運行程序,現在可以運行了。我正在使用的Java安裝顯然不允許類名字以大寫字母開頭...?