Лучший способ определить, работает ли код на сервере приложений java
Для J2EE bean Я использую код, который был разработан для приложения java swing. JOptionPane.showMessageDialog(), к сожалению, обычно используется. Большинство случаев, к счастью, относятся к разделам кода, которые не используются повторно J2EE-приложением, но в некоторых случаях более низкие уровни кода имеют экземпляры JOptionPane.showMessageDialog(). Очевидно, это приводит к появлению на сервере диалоговых окон, чего я хочу избежать.
В качестве первого шага я хотел бы как-то убедиться, что на сервере никогда не появятся диалоговые окна.
Кто-то предложил заглянуть в какую-то очередь или в очередь с краской (я не помню, какой из них):
Это будет:
// old code: JOptionPane.showMessageDialog(msg);
if ( someEventQueue.size() == 0 ) // <== consider this pseudo-code
Log.log(msg); // I am running on a server. Tell the log.
else
JOptionPane.showMessageDialog(msg); // I have a user made of meat. Tell him!
Я никогда не работал так. Что бы вы сделали?
Ответы
Ответ 1
Убедитесь, что сервер запущен с помощью
java -Djava.awt.headless=true
Большинство серверов должны быть запущены по умолчанию. Затем вы можете проверить:
boolean headless_check = GraphicsEnvironment.isHeadless();
Подробнее о безголовом доступном здесь:
Ответ 2
Я только что протестировал это с помощью среды выполнения OpenJDK (IcedTea 2.4.3) (Gentoo build 1.7.0_45-b31) в Linux, и я обнаружил, что unset DISPLAY
также было достаточно, чтобы сделать isHeadless()
(и isHeadlessInstance()
) return true
.
Итак, этот метод не просто говорит вам, был ли AWT вынужден игнорировать возможности системной графики, а скорее, имеет ли ваш процесс доступ к графическим возможностям вообще.
Пример:
Код работает на каком-то поле, которое не имеет карты отображения (что, вероятно, то, что вы хотите знать), поэтому вы всегда можете проверить системное свойство, если по какой-то причине вы хотите узнать, был ли режим безглавых принудительным.