java.awt.HeadlessException - Апплет не отображается - PullRequest
1 голос
/ 15 января 2009

Я использую Tomcat 5.5.23, JDK 1.5 на HP Unix. У нас есть приложение, которое при вызове формы tomcat запускает апплет. Это работало нормально до JDK 1.4. Но теперь мы перешли на JDK 1.5 и апплет не запускается. Исключение - java.awt.HeadlessException: Не установлена ​​переменная X11 DISPLAY, но эта программа выполнила операцию, которая требует этого.

Затем я добавил JAVA_OPTS = "- Djava.awt.headless = true" в файл catalina.sh. Но все же я получаю то же исключение без головы, но на этот раз без сообщения дисплея X11.

Любая помощь будет оценена.

Ответы [ 5 ]

2 голосов
/ 10 июля 2012
-Djava.awt.headless=false

добавить выше в ваш скрипт запуска Tomcat. это будет работать 100%

2 голосов
/ 19 января 2009

Странно .. вы пытаетесь запустить апплет (я полагаю, вы говорите о подклассе java.awt.Applet) внутри tomcat? Как правило, это не будет работать, потому что нет дисплея для отображения апплета.

Предполагая, что вы не хотите, чтобы апплет отображался где-либо, и вы просто хотите выполнить некоторую его часть программным путем, вы можете получить ее, используя виртуальный X-сервер, такой как Xvfb или Xvnc. После того, как на вашем хосте запущен tomcat, запущен Xvfb или Xvnc, вы можете попытаться настроить DISPLAY внутри сценариев запуска tomcat, чтобы использовать отображение виртуального X-сервера.

1 голос
/ 19 января 2009

Возможно, вы используете в своем коде Java что-то, что не может работать в безголовой системе, например графические компоненты (объекты Swing, изображения и т. Д.). Некоторые из этих компонентов, вместо того, чтобы напрямую обрабатываться Java, обрабатываются базовой платформой (само ядро ​​Windows или сервер X-Window в Unix). Таким образом, общая производительность приложения повышается.

Итак, вопрос в том, хорошо, если он работал на Java 1.4, почему он не работает на 1.5? Моя ставка, учитывая повышение производительности после Java 1.2, которое Swing получал со временем, заключается в том, что Sun перевела управление некоторыми графическими объектами на уровень ОС для повышения производительности. Поэтому, если вы не можете придерживаться версии 1.4, вам следует пересмотреть свой код.

Эта хорошая статья поможет вам понять, как изменить приложение, чтобы оно было безголовым.

0 голосов
/ 15 января 2009

Возможно, вам также придется установить библиотеки x11 или, по крайней мере, явно экспортировать путь к ним.

/ USR / X11R6 / Lib

0 голосов
/ 15 января 2009

Апплетам будет сложно работать на стороне сервера. Они предназначены для работы внутри контейнера, такого как веб-браузер. Исключение выдается, скорее всего, потому что апплет пытается нарисовать свой графический интерфейс - и сервер не оказывает поддержки для этого. Я удивлен, что это работало в JDK 1.4 - я не знаю, что изменилось между двумя ревизиями, которые могли бы повлиять на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...