La mejor manera de detectar si el código se está ejecutando en un servidor de aplicaciones Java
-
06-07-2019 - |
Pregunta
Para un bean J2EE, estoy reutilizando el código desarrollado para una aplicación Java Swing. Lamentablemente, JOptionPane.showMessageDialog () se usa comúnmente. La mayoría de las veces afortunadamente en las secciones de código que la aplicación J2EE no reutiliza, pero en algunos casos los niveles más bajos del código tienen instancias de JOptionPane.showMessageDialog (). Obviamente, esto resulta en cuadros de diálogo que aparecen en el servidor, que es lo que quiero evitar.
Como primer paso, me gustaría asegurar de alguna manera que nunca se producirán cuadros de diálogo en el servidor.
Alguien sugirió echar un vistazo en algún evento o cola de pintura (no recuerdo cuál): Eso sería:
// 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!
Nunca realmente conseguí que funcionara. ¿Qué harías?
Solución
Asegúrese de que el servidor se inicie con
java -Djava.awt.headless=true
La mayoría de los servidores deberían iniciarse de esa manera de manera predeterminada. Luego puede verificar:
boolean headless_check = GraphicsEnvironment.isHeadless();
Más detalles sobre sin cabeza disponibles aquí :
Otros consejos
Acabo de probar esto con OpenJDK Runtime Environment (IcedTea 2.4.3) (Gentoo build 1.7.0_45-b31) en Linux, y encuentro que unset DISPLAY
también fue suficiente para hacer isHeadless ()
(y isHeadlessInstance ()
) devuelve true
.
Entonces, este método no solo le dice si AWT se vio obligado a ignorar las capacidades gráficas del sistema, sino más bien si su proceso tiene acceso a las capacidades gráficas.
Ejemplo:
El código se está ejecutando en un cuadro que no tiene tarjeta de visualización ( eso es probablemente lo que quiere saber ) para que siempre pueda verificar la propiedad del sistema si por alguna razón desea saber si el modo sin cabeza era