在Linux上運行需要圖形界面的程序時出現如下錯誤提示:
No protocol specified
Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using ':1.0' as the value of the DISPLAY variable. at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method) at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:66) at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:187) at java.security.AccessController.doPrivileged(Native Method) at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:146) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:260) at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:102) at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:81) at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:123) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:260) at java.awt.Toolkit$2.run(Toolkit.java:860) at java.awt.Toolkit$2.run(Toolkit.java:855) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:854) at javax.swing.UIManager.getSystemLookAndFeelClassName(UIManager.java:611) at hgdbmonitor.view.MonitorView.main(MonitorView.java:2147)
錯誤原因:
- Linux默認情況下是啟動x11 windows server的,而且它是與windows的圖形工具顯示相關;
- 變量DISPLAY的值與程序界面顯示在機器的哪個圖形化終端有關,通過執行who命令和who am i 命令,可以知道當前圖形化終端是第n個(如下是第2個),那么變量DISPLAY的值應該是IP:(n-1)或者:(n-1)(如下是:1.0),只有這樣java圖形程序的界面才能正常顯示出來。
[root@localhost ~]# who staff :0 2016-01-09 13:18(:0) weblogic pts/1 2016-01-09 13:42(:0) [root@localhost ~]# who am i weblogic pts/1 2016-01-09 13:42(:0) [root@localhost ~]# echo $DISPLAY :0
解決辦法:
筆者的錯誤是使用Centos桌面版界面,使用了staff用戶登錄,所以圖形工具已經被staff用戶所在的用戶組所占用,因此weblogic用戶組無法使用圖形工具,只需把weblogic和staff兩個用戶變為一個組,或者使用weblogic用戶登錄Centos桌面版系統即可。
例如更改staff用戶為weblogic用戶組:
[root@localhost ~]# usermod -g weblogic staff
