Der beste Weg, zu erkennen, ob Code in einem Anwendungsserver Java läuft
-
06-07-2019 - |
Frage
Für ein J2EE-Bean I-Code bin Wiederverwendung, die für eine Java-Swing-Anwendung entwickelt wurde. JOptionPane.showMessageDialog () ist leider häufig verwendet. Die meisten Vorkommen glücklicherweise in Codeabschnitten, die von der J2EE-Anwendung nicht wiederverwendet werden, aber in einigen Fällen der unteren Ebene des Codes haben Instanzen JOptionPane.showMessageDialog (). Offensichtlich es Ergebnisse in Dialogfeldern auf dem Server Aufspringen, das ist, was ich vermeiden will.
Als erster Schritt würde Ich mag irgendwie versichern, dass keine Dialogfelder immer auf dem Server auftreten.
Jemand schlug vor, in einem Ereignis oder Farbe Warteschlange späht (Ich erinnere mich nicht, welche): Das wäre:
// 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!
I nie wirklich bekam, dass die Arbeit. Was würdest du tun?
Lösung
Stellen Sie sicher, dass der Server gestartet wird mit
java -Djava.awt.headless=true
Die meisten Server sollten auf diese Weise standardmäßig gestartet werden. Dann können Sie überprüfen:
boolean headless_check = GraphicsEnvironment.isHeadless();
Weitere Informationen zu kopflos verfügbar hier :
Andere Tipps
ich dies nur mit OpenJDK Runtime Environment getestet (IcedTea 2.4.3) (Gentoo bauen 1.7.0_45-b31) auf Linux, und ich finde, dass unset DISPLAY
war auch ausreichend ist, um isHeadless()
(und isHeadlessInstance()
) return true
zu machen.
So funktioniert diese Methode nicht nur Ihnen sagen, ob AWT gezwungen wurde, das Grafiksystem zu ignorieren, sondern vielmehr, ob Ihr Prozess hat Zugriff auf Grafikfunktionen auf alle.
Beispiel:
Der Code wird auf einige Box ausgeführt werden, die keine Grafikkarte hat ( das ist wahrscheinlich das, was Sie wissen wollen), so können Sie immer die Systemeigenschaft überprüfen, ob Sie aus irgendeinem Grund, ob Headless Modus wollen wissen, war gezwungen .