Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测代码是否在应用服务器java中运行的最佳方法_Java_Joptionpane - Fatal编程技术网

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

检测代码是否在应用服务器java中运行的最佳方法,java,joptionpane,Java,Joptionpane,对于J2EEbean,我正在重用为JavaSwing应用程序开发的代码作业窗格。showMessageDialog()很不幸经常使用。大多数发生在J2EE应用程序不重用的代码部分,但在某些情况下,较低级别的代码具有JOptionPane.showMessageDialog()的实例。显然,这会导致服务器上弹出对话框,这是我想要避免的 作为第一步,我想以某种方式确保服务器上不会出现任何对话框 有人建议在某个事件或绘画队列中偷看(我不记得是哪一个): 这将是: // old code: JOptio

对于J2EEbean,我正在重用为JavaSwing应用程序开发的代码<代码>作业窗格。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!
//旧代码:JOptionPane.showMessageDialog(msg);

如果(someEventQueue.size()==0)/请确保服务器以

java -Djava.awt.headless=true
默认情况下,大多数服务器都应该以这种方式启动。然后您可以检查:

boolean headless_check = GraphicsEnvironment.isHeadless();

更多关于headless的详细信息:

我刚刚在Linux上用OpenJDK运行时环境(IcedTea 2.4.3)(Gentoo build 1.7.0_45-b31)对其进行了测试,我发现
取消显示
也足以使
isHeadless()
(和
ISHEADLESSINSINSINSTANCE()
)返回
true

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

示例:

代码运行在没有显示卡的某个框上(这可能是您想要知道的),因此如果出于某种原因您想知道headless mode是强制的,还是任何自定义系统参数,例如-Dnodialog=true,那么您可以始终检查系统属性。这一点很好。每个环境都有许多独特的系统属性。对于Oracle OC4J应用程序服务器:System.getProperty(“Oracle.OC4J.instancename”);使用JVM选项-Djava.awt.headless=true的好处是每次执行JOptionPane.showMessageDialog(msg)时都会抛出HeadlessException,以此类推。顺便说一句:
GraphicsEnvironment.ishadles()
。。。因为
isHeadless()
是一个静态类方法。或者使用
ge.ishadlessinstance()
否则。。。6年没人注意到?O_o@DreamspacePresident我的观点主要是这个答案从一个实例对象调用一个静态方法。虽然Java确实支持这一点,
isHeadless()
实际上是静态的。。。因此,您确实不需要调用
GraphicsEnvironment.getLocalGraphicsEnvironment()
并返回一个实例来调用该方法。实际上,我个人只在编写小型服务器时使用这种静态方法。我从来没有(或认为相关)创建一个实例并调用
ishadlessinstance()
方法。如果以前没有问过,这可能是一个很好的SO问题。我会尝试用正确的方法来做。有一个带有方法
logToUser
的接口,或者在代码中传递它的实例,或者将它塞进某个静态字段(如果另一个不可行)。在您登录的地方,只需调用该方法。服务器上的代码用户必须提供一个实现,Swing应用程序必须提供另一个(Android或SWT或其他应用程序必须提供另一个)。确保尽早检查是否设置了实现,如果未设置,则引发异常。。。