1

我在我的应用程序的 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...

4

2 回答 2

4

To use AWT classes in a server side application, I believe you need to run in "headless" mode. Change your servlet container's startup to include:

-Djava.awt.headless=true

(Or set the system property within your own code if you really have to.)

You might also want to consider using an alternative imaging library - either a third-party one or the javax.imageio package.

于 2011-04-07T06:43:59.100 回答
1

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

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

题为“在 Java SE 平台中使用无头模式”的 Oracle Java 技术文章(Artem Ananiev 和 Alla Redko,2006 年 6 月)描述了这个问题以及如何解决这个问题。

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

于 2011-04-07T06:44:31.147 回答