Лучший способ определить, выполняется ли код на сервере приложений java
-
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 вынужден игнорировать графические возможности системы, но и имеет ли ваш процесс доступ к графическим возможностям вообще.
Пример:
Код выполняется на каком-то устройстве, у которого нет карты отображения (вероятно, это то, что вы хотите знать) таким образом, вы всегда можете проверить системное свойство, если по какой-то причине вы хотите знать, был ли безголовый режим вынужденный.