當前位置:編程學習大全網 - 源碼下載 - 怎麽處理java.lang.NoClassDefFoundError-CSDN論壇

怎麽處理java.lang.NoClassDefFoundError-CSDN論壇

NoClassDefFoundError錯誤的發生,是因為Java虛擬機在編譯時能找到合適的類,而在運行時不能找到合適的類導致的錯誤。例如在運行時我們想調用某個類的方法或者訪問這個類的靜態成員的時候,發現這個類不可用,此時Java虛擬機就會拋出NoClassDefFoundError錯誤。與ClassNotFoundException的不同在於,這個錯誤發生只在運行時需要加載對應的類不成功,而不是編譯時發生。很多Java開發者很容易在這裏把這兩個錯誤搞混。

簡單總結就是,NoClassDefFoundError發生在編譯時對應的類可用,而運行時在Java的classpath路徑中,對應的類不可用導致的錯誤。發生NoClassDefFoundError錯誤時,妳能看到如下的錯誤日誌:

1

Exception in thread "main" java.lang.NoClassDefFoundError1

錯誤的信息很明顯地指明main線程無法找到指定的類,而這個main線程可能時主線程或者其他子線程。如果是主線程發生錯誤,程序將崩潰或停止,而如果是子線程,則子線程停止,其他線程繼續運行。

怎麽解決NoClassDefFoundError錯誤

根據前文,很明顯NoClassDefFoundError的錯誤是因為在運行時類加載器在classpath下找不到需要加載的類,所以我們需要把對應的類加載到classpath中,或者檢查為什麽類在classpath中是不可用的,這個發生可能的原因如下:

對應的Class在java的classpath中不可用

妳可能用jar命令運行妳的程序,但類並沒有在jar文件的manifest文件中的classpath屬性中定義

可能程序的啟動腳本覆蓋了原來的classpath環境變量

因為NoClassDefFoundError是java.lang.LinkageError的壹個子類,所以可能由於程序依賴的原生的類庫不可用而導致

檢查日誌文件中是否有java.lang.ExceptionInInitializerError這樣的錯誤,NoClassDefFoundError有可能是由於靜態初始化失敗導致的

如果妳工作在J2EE的環境,有多個不同的類加載器,也可能導致NoClassDefFoundError

  • 上一篇:自拍引流源代碼
  • 下一篇:電腦怎麽優化
  • copyright 2024編程學習大全網