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

时间:2009-06-18 19:08:17

标签: java joptionpane

对于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!

我从来没有真的得到了这个。你会怎么做?

2 个答案:

答案 0 :(得分:24)

确保服务器以

启动
java -Djava.awt.headless=true

默认情况下,大多数服务器应该以这种方式启动。然后你可以检查:

boolean headless_check = GraphicsEnvironment.isHeadless();

有关无头可用here的详细信息:

答案 1 :(得分:0)

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

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

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