Лучший способ определить, выполняется ли код на сервере приложений java

StackOverflow https://stackoverflow.com/questions/1014620

  •  06-07-2019
  •  | 
  •  

Вопрос

Для компонента 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!

Я никогда в самом деле у меня это получилось.Что бы вы сделали?

Это было полезно?

Решение

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

java -Djava.awt.headless=true

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

boolean headless_check = GraphicsEnvironment.isHeadless();

Более подробную информацию о безголовых можно найти здесь .

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top