在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