我有一個java應用程序,用戶可以通過運行java -jar app.jar或通過雙擊.jar文件從桌面環境從命令行調用。有沒有一種安全的編程方式來確定打開Swing窗口是否安全?
我希望應用程序能夠檢測它是否可以安全地啓動Swing GUI,或者它是否必須使用命令行界面。如果我只是在沒有檢查窗口系統可用性的情況下開始調用Swing函數,那麼Java會用一個InternalError進行保護。
舉例來說,如果我未設置DISPLAY和運行應用程序,我得到:
java.lang.InternalError: Can't connect to X11 window server using '' as the value of the DISPLAY variable. at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method) at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:62) at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:178) at java.security.AccessController.doPrivileged(Native Method) at sun.awt.X11GraphicsEnvironment.(X11GraphicsEnvironment.java:142) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:186) at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82) at sun.awt.X11.XToolkit.(XToolkit.java:112) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:186) at java.awt.Toolkit$2.run(Toolkit.java:849) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:841) [etc]
我可能只是嘗試...趕上InternalError該並運行在這種情況下,命令行界面,但我d聽說不應該捕獲錯誤,因爲它們可能會使JVM處於不一致的狀態。 (請糾正我,如果我錯了。)
有沒有什麼辦法可以檢查我是否可以安全地打開Swing窗口而不捕獲InternalError? (我可以檢查顯示器的環境變量不爲空,但非空,顯示效果不能保證X服務器的實際工作,亦不會這種方法工作在非X11環境。)
儘管您不應該捕獲'Error',但在這種特定情況下,可能會收到'InternalError'(僅限於非常有限的'catch'塊只調用'getDefaultToolkit()')。但是因爲有更好的解決方案('isHeadless()'),所以沒有必要。 – 2011-05-05 06:33:33