前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java:Headless Mode

Java:Headless Mode

作者头像
WEBJ2EE
发布2019-07-19 11:36:36
2.7K0
发布2019-07-19 11:36:36
举报
文章被收录于专栏:WebJ2EEWebJ2EE

报了个错!

咋解决的?

给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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WebJ2EE 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档