Java:Headless Mode

报了个错!

咋解决的?

给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 ClientX 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

原文发布于微信公众号 - WebJ2EE(WebJ2EE)

原文发表时间:2018-05-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券