La mejor manera de detectar si el código se está ejecutando en un servidor de aplicaciones Java

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

  •  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?

¿Fue útil?

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 forzado .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top