支持HW团队,就支付宝领取下面的红包吧!(2018年3月31前,就几毛,也会几块,可以和其他红包叠加使用),你领取消费,HW有奖励。红包使用无条件限制,有条件请注意是不是有病毒。

小伙伴们,给大家发红包喽!人人可领,领完就能用。祝大家领取的红包金额大大大!#吱口令#长按复制此消息,打开支付宝就能领取!er1OEj73Uj

登入 注册 | 验证
| 搜索
HelloWorld论坛 : > 计算机科学、技术、教学> 编程入门> java jsp 入门> 【转载】Linux下java.awt.HeadlessException的解决,验证码不能显示
 
 
 
 
类别:java 阅读:2795 评论:0 时间:七月 12, 2016, 12:35 p.m. 关键字:

 

出处:http://blog.sina.com.cn/s/blog_6826662b01018tbf.html

 

感觉这个办法不行,我是启动tomcat 前,关键是要加全,别漏了,我还:

export LC_ALL=zh_CN.utf8

 

最近做的一个Java Web项目采用Struts2+Spring+HibernateJPA的标准架构,开发环境是win7,服务器部署环境是Ubuntu12.04,项目中有一个模块是采用JFreeChart生成图片,再创建并导入pdf文件中,开发完成后在windows下的tomcat6.0跑没有任何问题,但是部署到Ubuntu服务器上的tomcat6.0之后就不断出现问题。

    最开始部署到Ubuntu服务器上的tomcat时,当要创建含图表的pdf文件时,报出如下异常:

java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which requires it. 

        at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159) 
        at java.awt.Window.(Window.java:406) 
        at java.awt.Frame.(Frame.java:402) 
        at java.awt.Frame.(Frame.java:367) 
        at javax.swing.JFrame.(JFrame.java:163) 

 

上网查了一下,都说是没有配置Headless ModeHeadless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。Headless模式虽然不是我们愿意见到的,但事实上我们却常常需要在该模式下工作,尤其是服务器端程序开发者。因为服务器(如提供Web服务的主机)往往可能缺少前述设备,但又需要使用他们提供的功能,生成相应的数据,以提供给客户端(如浏览器所在的配有相关的显示设备、键盘和鼠标的主机)。

因此修改${TOMCAT_HOME}/bin/catalina.sh${TOMCAT_HOME}/bin/catalina.bat文件:

在所有类似以下代码:
 
   "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Djava.security.manager \
      -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \

 

在尾部加上一句:
 
     -Djava.awt.headless=true \

 

修改后内容如下:
 
   exec "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      -Djava.awt.headless=true \

 

tomcat6.0为例,总共有七处这样的地方。然后重启tomcat服务器,创建含图表的pdf时仍然报错,但是报的错不太一样了:

java.awt.HeadlessException 
 
       at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159) 
        at java.awt.Window.(Window.java:406) 
        at java.awt.Frame.(Frame.java:402) 
        at java.awt.Frame.(Frame.java:367) 
        at javax.swing.JFrame.(JFrame.java:163) 

        

于是又上网去查,说是启动tomcat的用户无法访问Xserver,包括Xserver没有启动或者没有权限访问。那就启动一下Xserver呗,于是在终端键入命令startx后报错:

root@localhost:~#startx &

 

/etc/X11/xinit/xserverrc: line 3: /usr/bin/X: No such file or directory
/etc/X11/xinit/xserverrc: line 3: exec: /usr/bin/X: cannot execute: No such file or directory
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error

 

我觉得可能是有一些依赖包没有安装,所以查找了一下,果然apt-get install xserver-xorg之后,X server可以正常启动了。然后我又照着网上所述配置了DISPLAY环境变量:

 

root@localhost:~#export DISPLAY=localhost:0.0

root@localhost:~#xhost +

 

然后重启tomcat服务器,再试还是不行,报错仍然如下:

java.awt.HeadlessException 
 
       at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159) 
        at java.awt.Window.(Window.java:406) 
        at java.awt.Frame.(Frame.java:402) 
        at java.awt.Frame.(Frame.java:367) 
        at javax.swing.JFrame.(JFrame.java:163) 

 


 

于是又在catalina.sh脚本中把headless模式改为了false,重启tomcat服务器,终于没问题了,囧死……至此搞得一头雾水,不过问题总算是没有了。 

-Djava.awt.headless=true \

 

[挂载人]初学MPEG

个人签名--------------------------------------------------------------------------------

Please Login (or Sign Up) to leave a comment