Java中的NoClassDefFoundError出現在Java虛擬機在編譯時無法在運行時找到特定類的時候。例如,如果我們有一個來自某個類的方法調用或訪問某個Class的靜態成員,並且該類在運行時不可用,那麼JVM將拋出NoClassDefFoundError。理解這一點很重要,它不同於ClassNotFoundException,它只是在運行時加載一個類,而在運行時不是在編譯時提供的。許多Java開發人員混淆了這兩個錯誤並且感到困惑。
總之,如果一個類在編譯時存在,但在運行時在java classpath中不可用,則會出現NoClassDefFoundError。通常情況下,你會看到下面的線數,當你得到的NoClassDefFoundError:
如何解決java.lang.NoClassDefFoundError:
java.lang.NoClassDefFoundError在Java中的NoClassDefFoundError的解決方案顯而易見的原因是一個特定的類在Classpath中不可用,所以我們需要將它添加到Classpath中,或者我們需要檢查爲什麼它在Classpath中不可用,如果我們期待它。可能有以下幾種原因:
1)類在Java Classpath中不可用。 2)您可能正在使用jar命令運行您的程序,並且未在清單文件的ClassPath屬性中定義類。 3)任何啓動腳本都重寫Classpath環境變量。 4)因爲NoClassDefFoundError是java.lang.LinkageError的子類,所以如果其中一個依賴項如本地庫可能不可用,它也會出現。 4)檢查日誌文件中的java.lang.ExceptionInInitializerError。由於靜態初始化失敗而導致的NoClassDefFoundError非常常見。 5)如果您在J2EE環境中工作比在多個類加載器中的類的可見性還會導致java.lang.NoClassDefFoundError,請參閱示例和方案部分以獲得詳細的討論。
當java.lang.NoClassDefFoundError出現之前以及如何解析時,我們將看到幾個示例和場景。這可以幫助您排除Java應用程序中NoClassDefFoundError的根本原因。
是否缺少$(或取決於OS%)從CLASSPATH聲明的前面? – DaveH
創建'program_name.class'的目錄需要位於類路徑中,例如'-classpath。:$ CLASSPATH:weka.jar'(如果它位於當前目錄中)。 – tom
謝謝你找回傢伙! 「$」引發錯誤。我嘗試了Java Devil建議的內容,但仍然收到NoClassDefFound消息。當我使用Eclipse(Windows)運行它時,該程序正常工作。當我嘗試從終端上運行它時,我遇到了這個問題。 –