Сервлет дает ошибку java.lang.NoClassDefFoundError - PullRequest
1 голос
/ 07 апреля 2011

Я использую следующий код в сервлете моего приложения

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

Когда я запускаю приложение и вызываю сервлет, я получаю следующую ошибку

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 - это сервлет, который вызывает метод внутри вышеуказанного класса ...

Ответы [ 2 ]

4 голосов
/ 07 апреля 2011

Чтобы использовать классы AWT в серверном приложении, я считаю, что вам нужно работать в режиме "без головы" . Измените запуск контейнера сервлетов на:

-Djava.awt.headless=true

(Или установите системное свойство в своем собственном коде, если вам действительно нужно.)

Возможно, вы захотите использовать альтернативную библиотеку изображений - стороннюю или пакет javax.imageio.

1 голос
/ 07 апреля 2011

Это почти наверняка не полная трассировка стека. Либо эта трассировка стека, либо более ранняя в файле журнала расскажет вам, что вызвало сбой инициализации sun.awt.X11.XToolkit.

Тем не менее, я бы рискнул предположить, что основная причина в том, что JVM, на которой работает веб-движок, «безголовый»; то есть он не имеет доступного дисплея.

В технической статье Oracle Java, озаглавленной "Использование режима без головы в платформе Java SE" (автор Артем Ананьев и Алла Редько, июнь 2006 г.), описывается проблема и что с этим делать.

Решение, вероятно, так же просто, как добавление -Djava.awt.headless=true к параметрам JVM в скрипте запуска веб-контейнера. Например, если вы используете Tomcat, добавьте это в переменную окружения $JAVA_OPTS перед вызовом catalina.sh.

...