Chinaunix首页 | 论坛 | 博客
  • 博客访问: 187902
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 275
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-24 19:36
文章存档

2017年(17)

2016年(13)

2015年(4)

2014年(6)

2011年(1)

我的朋友

分类: LINUX

2016-11-11 11:51:04

http://blog.sina.com.cn/s/blog_6826662b01018tbf.html
    最近做的一个
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) 

 

上网继续找原因,终于在Debian论坛上看到一条回复:

Linux下java.awt.HeadlessException的解决

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

阅读(3719) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~