Il modo migliore per rilevare se il codice è in esecuzione in un server applicazioni Java

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

  •  06-07-2019
  •  | 
  •  

Domanda

Per un bean J2EE sto riutilizzando il codice sviluppato per un'applicazione java swing. JOptionPane.showMessageDialog () è purtroppo comunemente usato. La maggior parte delle occorrenze fortunatamente nelle sezioni di codice non riutilizzate dall'applicazione J2EE, ma in alcuni casi livelli inferiori del codice ha istanze di JOptionPane.showMessageDialog (). Ovviamente questo si traduce in finestre di dialogo che appaiono sul server, che è ciò che voglio evitare.

Come primo passo, vorrei in qualche modo garantire che sul server non si verificheranno mai finestre di dialogo.

Qualcuno ha suggerito di sbirciare in qualche evento o coda di colori (non ricordo quale): Sarebbe:

// 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!

Non ho mai veramente funzionato. Cosa faresti?

È stato utile?

Soluzione

Assicurati che il server sia avviato con

java -Djava.awt.headless=true

La maggior parte dei server dovrebbe essere avviata in questo modo per impostazione predefinita. Quindi puoi controllare:

boolean headless_check = GraphicsEnvironment.isHeadless();

Maggiori dettagli su headless disponibili qui :

Altri suggerimenti

Ho appena provato questo con OpenJDK Runtime Environment (IcedTea 2.4.3) (Gentoo build 1.7.0_45-b31) su Linux e trovo che unset DISPLAY sia stato sufficiente anche per rendere isHeadless () (e isHeadlessInstance () ) restituisce true .

Quindi, questo metodo non ti dice solo se AWT è stato costretto a ignorare le capacità grafiche del sistema, ma piuttosto se il tuo processo ha accesso alle capacità grafiche.

Esempio:
Il codice è in esecuzione su una scatola che non ha una scheda di visualizzazione ( questo è probabilmente quello che vuoi sapere ) in modo da poter sempre controllare la proprietà del sistema se per qualche motivo vuoi sapere se la modalità senza testa era costretto .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top