12

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

我从来没有真正做到这一点。你会怎么办?

4

2 回答 2

25

确保服务器以

java -Djava.awt.headless=true

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

boolean headless_check = GraphicsEnvironment.isHeadless();

此处提供有关无头的更多详细信息:

于 2009-06-18T19:19:52.240 回答
0

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

因此,此方法不仅告诉您 AWT 是否被迫忽略系统的图形功能,还告诉您您的进程是否完全可以访问图形功能。

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

于 2013-12-30T14:49:06.613 回答