java.lang.NoClassDefFoundError: Could not initialize class異常

oClassDefFoundError發生在編譯時對應的類可用,而運行時在Java的classpath路徑中,對應的類不可用致使的錯誤。
經過查找資料,容易發生此類異常的緣由是:html

  - 類依賴的class或者jar不存在java

  - 類文件存在,可是存在不一樣的域中
1. 對應的Class在java的classpath中不可用;web

2. 你可能用jar命令運行你的程序,但類並無在jar文件的manifest文件中的classpath屬性中定義;apache

3. 可能程序的啓動腳本覆蓋了原來的classpath環境變量;tomcat

4. 由於NoClassDefFoundError是java.lang.LinkageError的一個子類,因此可能因爲程序依賴的原生的類庫不可用而致使;less

5. 檢查日誌文件中是否有java.lang.ExceptionInInitializerError這樣的錯誤,NoClassDefFoundError有多是因爲靜態初始化失敗致使的;spa

6. 若是你工做在J2EE的環境,有多個不一樣的類加載器,也可能致使NoClassDefFoundError;日誌

7.NoClassDefFoundError`也可能因爲類的靜態初始化模塊錯誤致使,當你的類執行一些靜態初始化模塊操做,若是初始化模塊拋出異常,哪些依賴這個類的其餘類會拋出NoClassDefFoundError的錯誤。若是你查看程序日誌,會發現一些java.lang.ExceptionInInitializerError的錯誤日誌,ExceptionInInitializerError的錯誤會致使java.lang.NoClassDefFoundError: Could not initialize class。code

ava應用部署在tomcat容器中,其中有個功能是把html頁面渲染成pdf文件,在html轉換pdf的過程當中報錯:java.lang.NoClassDefFoundError: Could not initialize class java.awt.Rectangle:server

java.lang.NoClassDefFoundError: Could not initialize class java.awt.Rectangle at org.xhtmlrenderer.pdf.ITextRenderer.getInitialExtents(ITextRenderer.java:217) at org.xhtmlrenderer.pdf.ITextRenderer.layout(ITextRenderer.java:206)

解決方法在另一篇文章《BufferedImage圖形驗證報錯Could not initialize class sun.awt.X11GraphicsEnvironment解決辦法》中有遇到過相似的狀況,此處的解決方法與其相似:

在catalina.sh啓動腳本中的JAVA_OPTS中加入」-Djava.awt.headless=true」,亦能夠正常訪問圖形驗證碼,修改下以下:

JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Djava.awt.headless=true" 

經查,出現這種狀況通常就是啓動tomcat的用戶沒法訪問Xserver,包括Xserver沒有啓動或者沒有權限訪問。加入上面所說的選項,便可正常。

以上文章摘抄

相關文章
相關標籤/搜索