Лучший способ определить, выполняется ли код на сервере приложений Java - PullRequest
12 голосов
/ 18 июня 2009

Для bean-компонента J2EE я повторно использую код, разработанный для 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!

Я никогда на самом деле не работал. Чтобы ты делал?

Ответы [ 2 ]

24 голосов
/ 18 июня 2009

Убедитесь, что сервер запущен с

java -Djava.awt.headless=true

Большинство серверов должны запускаться таким образом по умолчанию. Тогда вы можете проверить:

boolean headless_check = GraphicsEnvironment.isHeadless();

Более подробная информация о безголовых доступна здесь :

0 голосов
/ 30 декабря 2013

Я только что проверил это с помощью среды выполнения OpenJDK (IcedTea 2.4.3) (сборка Gentoo 1.7.0_45-b31) в Linux, и я обнаружил, что unset DISPLAY также было достаточно, чтобы сделать isHeadless()isHeadlessInstance()) возврат true.

Таким образом, этот метод говорит не только о том, был ли AWT вынужден игнорировать графические возможности системы, но и о том, имеет ли ваш процесс доступ к графическим возможностям вообще.

Пример:
Код работает на каком-то поле, в котором нет карты дисплея (, это, вероятно, то, что вы хотите знать ), поэтому вы всегда можете проверить системное свойство, если по какой-то причине вы хотите узнать, был ли режим без головы вынужден .

...