对于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 Runtime Environment(IcedTea 2.4.3)(Gentoo build 1.7.0_45-b31)测试了这个,我发现 unset DISPLAY 也足以使 isHeadless()(和 isHeadlessInstance())返回 true

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top