Java初學者往往對如何配置Java開發環境感到迷惑,論壇上也有很多朋友在詢問關於JDK配置的問題,特別是配置之後,編譯java檔案的時候,總是碰到這樣一個問題,錯誤提示為: Microsoft Windows 2000 [Version 5.00.2195] (C) 著作權 1985-1998 Microsoft Corp. C:/>javac HelloWorld.java C:/>java HelloWorld Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld C:/> 以上為出錯資訊,來源程式如下: class HelloWorld { public static void main(String[] args) { // Display "Hello World!" System.out.println("Hello World!"); } } 譯通過 運行怎麼就Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld???????/ 對於以上的問題,大家一貫的解決方案為,把HelloWorld.java檔案所在目錄的路徑加入參數classpath中,如:set classpath=%classpath%;.;……(這裡要注意其中的“.;”,一會兒我們做個實驗看看到底是什麼意思)。我試過了,好像不行,不知道是不是我沒有配置好。至於給這個問題解答的網友有沒有具體實踐過,我不得而知。於是,我自己做了一次嘗試。 我使用Win2000+JDK1.30,在java.sun.com下載j2sdk1_3_0-win.exe,然後點擊安裝,安裝系統預設的路徑,安裝到c:盤,即:c:/jdk130。安裝完成需要配置環境,這涉及到三個參數:path、classpath、java_home。在我的電腦-》屬性-》進階-》環境變數 中,分別添加這三個變數,他們的值分別為: 名稱=值 java_home=c:/jdk130 (安裝路徑) classpath=.;C:/jdk13/lib/tools.jar;C:/jdk13/lib/dt.jar;C:/jdk13/bin; path= C:/jdk13/bin; 然後確定就可以了。 註解:classpath用於指明所有用於引用的類所在的目錄,它允許使用者把自己的類放在不同的目錄中,但應該讓JDK編譯工具知道它們在那裡。例如: set classpath=.;C:/jdk13/lib/tools.jar;C:/jdk13/lib/dt.jar;C:/jdk13/bin; 命令中的第一個圓點指明classpath當前的工作目錄。這個圓點非常有用,當不願意輸入完整的目前的目錄路徑時,可以用它來代替,java程式允許這麼做。 在d:建立子目錄java,編寫一個java檔案,名字叫Hello.java,進入dos模式,進入到目錄d:/java,然後敲入javac Hello.java,編譯通過。然後可以使用java Hello運行產生的class檔案,沒有問題,結果正常輸出。若是我們在Hello.java檔案中的第一句加入:package hello; ,然後編譯,沒有出現錯誤,運行時我們會看到如下錯誤資訊: Exception in thread "main" java.lang.NoClassDefFoundError: Hello (wrong hello/Hello) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:486) at java.security.SecureClassLoader.defineClass(SecureClassLoader. 1) at java.net.URLClassLoader.defineClass(URLClassLoader.java:248) at java.net.URLClassLoader.access0(URLClassLoader.java:56) at java.net.URLClassLoader.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:297) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286) at java.lang.ClassLoader.loadClass(ClassLoader.java:253) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313) 這時,我們在編譯的時候,應該這樣:javac -d . Hello.java這樣會在目前的目錄下產生一個新的子目錄,目錄名字就是hello。 我們可以用一下兩種方法運行編譯好的檔案,在目前的目錄下,敲入:java hello/Hello或者java hello.Hello ,這樣我們就可以看到運行結果了。 |