报了个错!
咋解决的?
给Weblogic的JVM加了个参数...
-Djava.awt.headless=true
1. 异常还原...
A. 测试环境:
CentOS 7(换成RHEL也行) Openjdk version "1.8.0_131"(换成Oracle JDK也行) apache-tomcat-7.0.84(换成Weblogic也可以) XManager Enterprise 5
B. 测试代码(就是个普通的Servlet...):
C. 测试步骤:
a. 安装CentOS、Tomcat;
b. 部署测试程序; c. 使用XShell远程访问CentOS,并启动Tomcat;
d. 关闭XShell; e. 用浏览器访问测试程序;
D. 测试结果:
从报错中可以看出,服务器在调用AWT绘图API时,尝试通过地址“localhost:10.0”与一个叫“X11 Window Server”的东西建立连接,但失败了....再次访问时,报错就变为“不能初始化类sun.awt.X11GraphicEnvironment”;
2. 为啥加个参数就搞定了?
A. 再看个例子
B. 参数-Djava.awt.headless=true影响了什么?
C. 什么是headless模式?
——From Wikipedia
Headless是指服务器的
无显示设备状态
(缺少显示器、键盘、鼠标)
例:应用集群、数据库集群等,它们一般没有显示器、键盘、鼠标,都是通过网络远程操作。
D. AWT与headless模式
AWT是Java构建GUI应用的标准API接口,且Java自带2套实现类,一套供标准模式使用(显示设备、驱动可用),另一套供headless模式使用(显示设备、驱动不可用);
Button、Checkbox、Choice、Dialog、FileDialog、Label、List、Menu、MenuBar、MenuItem、PopupMenu、Scrollbar、ScrollPane、TextArea、TextField、Window
注:这些组件,只能运行在“标准模式”下,Headless模式中使用会报错;
Canvas、Fonts、Colors、Images
注:这些组件不仅在“标准模式”下可用,它们的Headless版本也可以在Headless模式下正常使用;
通常B/S型Web应用运行于无显示设备、驱动的服务器端环境中,但是有使用AWT绘图接口的可能(例如:用Images、Fonts接口生成图片验证码);所以给Tomcat、Weblogic附加参数-Djava.awt.headless=true,强制使用Headless版本的AWT实现类,就能避免图形环境缺失所导致的程序出错;
参考:
http://www.oracle.com/technetwork/articles/javase/headless-136834.html
3. 为啥报错发生在关闭XShell后?
再看一次报错,关闭XShell后,是因为“无法与X11 Window Server建立连接”,造成的“不能初始化类 sun.awt.X11GraphicEnvironment”!
A. X11是啥?
1. Linux是基于命令行的操作系统,图形界面不是内核的一部分,是由应用程序负责实现; 2. X Window System是一套为UNIX提供GUI图形操作界面的应用程序; 3. X Window System是客户端-服务器架构,由(X Client、X Server)2部分构成; 3. X 是协议,是X Client、X Server间的通信协议,X11是X协议的第11个版本(最新版);
B. 服务器为啥要主动连接X11 Window Server?
当使用XShell连接到Linux时,图形化环境是可用的(Linux作为XClient与XShell建立X11通信通道,将图形图像委托给XShell显示);关闭XShell(XServer)后,X11通道被断开,当程序再去调用AWT接口时,就会出现由于X11通道被断开导致的“无法与X11 Window Server建立连接”报错,进而出现“无法初始化类sun.awt.X11GraphicsEnvironment ”的错误!
一句话总结:
要给Tomcat、Weblogic脚本中附加
-Djava.awt.headless=true
参考:
《鸟哥的linux私房菜——基础学习篇》
《鸟哥的linux私房菜——服务器架设篇》 http://www.oracle.com/technetwork/articles/javase/headless-136834.html http://smallbusiness.chron.com/headless-linux-33715.html https://en.wikipedia.org/wiki/Headless_software https://en.wikipedia.org/wiki/X_Window_System_core_protocol https://en.wikipedia.org/wiki/Abstract_Window_Toolkit