检测代码是否在应用程序服务器java中运行的最佳方法

对于J2EE bean,我正在重用为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(); 

有关无头的详细信息,请点击此处 :

我刚刚在Linux上使用OpenJDK运行时环境(IcedTea 2.4.3)(Gentoo build 1.7.0_45-b31)对此进行了测试,我发现未unset DISPLAY也足以使isHeadless() (和isHeadlessInstance() )返回true

因此,这种方法不只是告诉您AWT是否被迫忽略系统的图形function,而是说您的进程是否可以访问图形function。

例:
代码在没有显示卡的某个盒子上运行( 这可能是你想知道的 ),所以你总是可以检查系统属性,如果由于某种原因你想知道是否强制无头模式。