Exception in thread “main” java.lang.NoClassDefFoundError: ….. 每次看到這個錯誤訊息就快抓狂,趁現在頭腦還清楚,用自己最容易看懂的方法記錄下來。

在 Windows 環境下進入 控制台 -> 系統 -> 進階 -> 系統變數

  • 設定 Path

    存一些在 cmd 下可以直接輸入的指令,例如:java, javac, ant …. 安裝完 JDK 後,如果有設定好,就不會看到以下錯誤訊息

    'java' 不是內部或外部命令、
    可執行的程式或批次檔。

    Java 方面的設定:在原有的設定裡,加上 Java 安裝目錄下的 bin 資料夾路徑,例如:安裝 JDK 1.6.0_04 版本的預設路徑為 C:\Program Files\Java\jdk1.6.0_04 因此,在 Path 中加入 ;C:\Program Files\Java\jdk1.6.0_04\bin 
    重新啟動一個 cmd 輸入 java 或 javac 看看,就不會再有剛剛的錯誤訊息,這邊要注意前面的「;」千萬不可以省略。
    P.S. 安裝 ant 也是在 Path 裡加入 ant 安裝目錄下 bin 資料夾路徑。e.g. “C:\ant\bin”

  • 設定 CLASSPATH

    儲存一些 jar 檔的路徑,如果有使用到某個 jar 檔裡面的 packages,在編譯與執行的時候都要先設置 -classpath,例如:javac -classpath .;C:\lib\xxxx.jar HelloWorld.java。可以直接設置在環境變數,就不用每次都要指定 -classpath。

    Exception in thread "main" java.lang.NoClassDefFoundError:

    看到上面這個錯誤訊息,多半是因為 classpath 沒設定好(搞好久) = = 設定為:.;C:\Program Files\Java\jdk1.6.0_04\lib\tools.jar; 分號後面自己增加要使用的 jar file
    P.S. 分號最前面的 「.」 不可遺漏,表示從目前目錄尋找 class

  • 紀錄:使用 package

    例如:透過 package com.test 把 hello.java 產生的 class 檔打包。在 C:\java\ 下編譯 => “javac -d . hello.java”,class 會編譯完會出現在 C:\java\com\test\hello.class,這時候要執行 hello 就必須在 C:\java\ 下透過 “java com.test.hello” 才能執行,直接輸入 “java hello” 或是到 C:\java\com\test\ 下輸入 “java hello” 是不行的。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *