Servlet给出错误java.lang.NoClassDefFoundError

时间:2011-04-07 06:39:28

标签: java servlets classnotfound

我在我的应用程序的servlet中使用以下代码

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

当我运行应用程序并调用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)

我在使用Java版JDK 1.6.20的Linux机器上托管了该应用程序。

可能导致此问题的原因......

noticeandreports.pdf.appendFiles.PdfFunctionsClass是编写代码的类,OJ.NoticesandReports.generate_151_OJNotice是调用上面类中的方法的servlet ...

2 个答案:

答案 0 :(得分:4)

要在服务器端应用程序中使用AWT类,我相信您需要以"headless"模式运行。将servlet容器的启动更改为包括:

-Djava.awt.headless=true

(或者如果真的必须在你自己的代码中设置系统属性。)

您可能还想考虑使用替代影像库 - 第三方或javax.imageio封装。

答案 1 :(得分:1)

这几乎肯定不是完整的堆栈跟踪。堆栈跟踪或日志文件中的早期堆栈跟踪将告诉您导致sun.awt.X11.XToolkit初始化失败的原因。

然而,我猜测根本原因是运行网络计数器的JVM是“无头”的;即它没有可访问的显示器。

题为"Using Headless Mode in the Java SE Platform"的Oracle Java技术文章(作者Artem Ananiev和Alla Redko,2006年6月)描述了该问题以及该怎么做。

解决方案可能就像将-Djava.awt.headless=true添加到Web容器启动脚本中的JVM选项一样简单。例如,如果您使用的是Tomcat,请在调用$JAVA_OPTS之前将其添加到catalina.sh环境变量。