2009-06-18 102 views
11

對於J2EE bean,我重複使用爲java swing應用程序開發的代碼。 JOptionPane.showMessageDialog()不幸被廣泛使用。幸運的是,在J2EE應用程序中沒有重用的代碼段中,大多數情況都是幸運的,但在某些情況下,代碼的較低級別具有JOptionPane.showMessageDialog()的實例。很顯然,這會導致服務器上彈出對話框,這是我想避免的。檢測代碼是否在應用程序服務器中運行的最佳方法java

作爲第一步,我想以某種方式確保服務器上不會出現任何對話框。

有人建議在某些事件或油漆隊列偷看(我不記得是哪一個): 這將是:

// 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! 

我從來沒有真正該工作。你會怎麼做?

+0

我會盡力做到這一點正確的方式。有一個與`logToUser`方法的接口,並且在你的代碼中傳遞它的一個實例,或者將它放到一個靜態字段(如果另一個是不可行的)。在你登錄的地方,只需調用該方法即可。服務器上的代碼的用戶將不得不提供一個實現,並且Swing應用程序提供另一個(並且Android或SWT或另一個應用程序將不得不提供另一個)。請確保提前檢查實施是否已設置,如果不是,則拋出異常... – mihi 2013-12-30 15:21:25

回答

23

確保服務器啓動與

java -Djava.awt.headless=true 

大多數服務器應啓動默認的方式。然後,你可以檢查:可用的無頭here

boolean headless_check = GraphicsEnvironment.isHeadless(); 

更多細節:

+0

或者任何自定義系統參數,例如-Dnodialog = true。 – akarnokd 2009-06-18 19:24:05

0

我剛剛與OpenJDK的運行時環境(IcedTea項目2.4.3)(Gentoo的建立1.7.0_45-b31)中的Linux上進行了測試,我發現unset DISPLAY也足以使isHeadless()(和isHeadlessInstance())返回true

因此,此方法不僅告訴您AWT是否被迫忽略系統的圖形功能,而是您的進程是否可以訪問圖形功能。

例子:
代碼是一些盒子,沒有顯示卡(這可能是你想知道什麼),所以如果由於某種原因,你想知道是否無頭模式中,您可以隨時檢查系統屬性運行被迫爲

相關問題