2011-04-07 45 views
1

我使用下面的代碼在我的應用程序的Servlet給錯誤java.lang.NoClassDefFoundError

java.awt.Image awtImg = java.awt.Toolkit.getDefaultToolkit().createImage(str1);

的一個servlet當我運行應用程序並調用servlet我收到以下錯誤

java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit 
java.lang.Class.forName0(Native Method) 
java.lang.Class.forName(Class.java:169) 
java.awt.Toolkit$2.run(Toolkit.java:834) 
java.security.AccessController.doPrivileged(Native Method) 
java.awt.Toolkit.getDefaultToolkit(Toolkit.java:826) 
noticeandreports.pdf.appendFiles.PdfFunctionsClass.addSealSpace(PdfFunctionsClass.java:198) 
OJ.NoticesandReports.generate_151_OJNotice.execute(generate_151_OJNotice.java:768) 
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425) 
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228) 
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

我主持一臺Linux機器的Java JDK版本1.6.20上的應用程序..

什麼可能導致該問題...

noticeandreports.pdf.appendFiles.PdfFunctionsClass是在代碼編寫和OJ.NoticesandReports.generate_151_OJNotice是調用上面的類中的方法,這個servlet類...

+0

您使用哪個JDK?根據我的經驗,大多數Linux發行版默認情況下不提供Sun/Oracle JDK,而其他JDK可能缺少該文件(它應該位於'rt.jar'中,該文件應位於類路徑中)。 – Thomas 2011-04-07 06:43:40

+0

我正在使用SUN JDK我正在Linux Redhat上運行我在其中安裝了SUN JDK 1.6.20 ..並且我在位於/opt/jdk1.6.20/jre/的java中安裝了'rt.jar' lib' – 2011-04-07 06:47:13

回答

4

要在服務器端應用程序中使用AWT類,我相信你需要運行"headless"模式。改變你的servlet容器的啓動,包括:

-Djava.awt.headless=true 

(或一組自己的代碼中的系統屬性,如果你真的有。)

您可能還需要考慮使用替代成像庫 - 無論是第三方還是javax.imageio包。

+0

它工作正常,沒有任何錯誤或例外幾天,爲什麼它會突然出現錯誤? – 2011-04-07 07:30:25

+0

S.M.09:完全相同的代碼,沒有配置更改?不知道。如果你之前說過,那將會很有用。 – 2011-04-07 07:40:12

+1

@Jon Skeet:完全相同的代碼,沒有配置更改?是的......沒有任何變化......在很多天裏都工作得很好......今天早上突然間,我盯着來自世界各地的電話!它可能是某種腐敗?因爲改變無頭模式確實使錯誤消失... – 2011-04-07 07:50:42

1

這幾乎肯定不是完整的堆棧跟蹤。堆棧跟蹤或日誌文件中較早的那個會告訴你什麼導致sun.awt.X11.XToolkit的初始化失敗。然而,我猜測根本原因是運行Web計數器的JVM是「無頭」的;即它沒有可訪問的顯示器。

Oracle Java技術文章標題爲"Using Headless Mode in the Java SE Platform"(Artem Ananiev和Alla Redko,2006年6月)描述了這個問題以及如何處理它。

該解決方案可能與將-Djava.awt.headless=true添加到Web容器啓動腳本中的JVM選項一樣簡單。例如,如果您使用Tomcat,請在致電catalina.sh之前將其添加到$JAVA_OPTS環境變量中。

+0

缺少Sun技術文章鏈接 – rajadilipkolli 2016-10-05 10:49:51

+0

@rajadilipkolli - 您能找到缺失的文章嗎? – 2016-10-05 12:31:00

+0

我試了很多,找不到,因此如果你可以幫我 – rajadilipkolli 2016-10-08 10:45:55