`
hai0378
  • 浏览: 533837 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jenkins Linux下java.awt.HeadlessException的解决

阅读更多

最近做的一个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服务器,终于没问题了,囧死……至此搞得一头雾水,不过问题总算是没有了。

分享到:
评论

相关推荐

    windows下安装Jenkins 2.289.3 jenkins.msi

    jenkins.msi jdk1.8支持的最后一个版本jenkins,验证可用Jenkins Jenkins 2.289.3 jenkins.msi jdk1.8支持的最后一个版本jenkins,验证可用Jenkins Jenkins 2.289.3 jenkins.msi jdk1.8支持的最后一个版本jenkins,...

    windows下验证可用Jenkins 2.346.1

    jenkins.msi jdk1.8支持的最后一个版本jenkins,验证可用Jenkins 2.346.1 jenkins.msi jdk1.8支持的最后一个版本jenkins,验证可用Jenkins 2.346.1 jenkins.msi jdk1.8支持的最后一个版本jenkins,验证可用Jenkins 2...

    linux服务器配置jenkins 2.426.1

    linux服务器配置jenkins 2.426.1

    linux jenkins 原始配置config.xml

    linux jenkins 原始配置config.xml

    jenkins 2.346.3.zip

    1. **安装**:将 `jenkins.war` 文件部署到支持 Servlet 的应用服务器,比如直接在命令行中运行 `java -jar jenkins.war`。 2. **初始化**:首次启动后,Jenkins 会创建默认配置,并提供一个初始密码,需要在浏览器...

    Jenkins 2.401.3 LTS(war包)

    在实际使用中,下载的 "Jenkins 2.401.3 LTS" 压缩包将包含 Jenkins 服务器的 war 文件,该文件可以直接在支持的 JDK 环境下运行。部署时,用户需要将 war 文件放到应用服务器的 web 容器(如 Tomcat)中,启动容器...

    Jenkins 2.346.1插件

    支持java8的jenkins插件,jenkins版本-Jenkins 2.346.1。解压替换jenkins插件目录plugins,就可以使用jenkins创建项目了。

    jenkins2.346.1稳定版windows(支持java8)

    1、jenkins2.346.1版本,支持java8的...3、如需要其他版本安装包,移步官网https://www.jenkins.io/zh/download/下载或者选用清华源下载,但没那么健全 https://mirrors.tuna.tsinghua.edu.cn/jenkins/windows-stable/

    Jenkins 2.387.3

    Jenkins拥有庞大的插件库,包括Git插件用于版本控制,Maven插件用于构建Java项目,Junit插件用于展示测试结果,以及蓝绿部署、灰度发布等高级部署策略的插件。这些插件扩展了Jenkins的功能,使其能够适应各种复杂的...

    jenkins 2.164.1 在用

    通过安装`jenkins.msi`,用户可以在Windows环境下快速开始使用,享受Jenkins带来的便利和效率提升。结合配套的教程,无论是初学者还是经验丰富的开发者,都能在Jenkins的世界里找到适合自己的自动化打包方案。

    jenkins2.277.4 及解决插件安装相关工具包.rar

    1. Jenkins windows 安装版 jenkins2.277.4.msi 2. Java验证https 访问的工具类 ...4. 本资源为 “Jenkins 在Windows下插件无法安装问题解决 https://oscar.blog.csdn.net/article/details/117012184 ” 的配套资源

    jenkins 2.346.1 git maven ssh插件

    jenkins 2.346.1,jdk8 适用 git maven ssh插件

    Jenkins 2.332.2 LTS war包和插件

    `jenkins.war` 文件是 Jenkins 的核心服务包,它基于 Java Web 应用程序的格式。当这个 WAR 文件被部署到一个支持 Java Servlet 容器(如 Tomcat 或 Jetty)时,它会启动 Jenkins 服务器。WAR 文件包含 Jenkins 的...

    Jenkins2.332.1LTS.msi

    Jenkins2.332.1LTS.msi 适用于Windows系统

    CentOS7安装Jenkins-2.346.1,jdk8

    node-v16.16.0-linux-x64.tar.gz jenkins.war(Jenkins-2.346.1,jdk8) jdk-11.0.19_linux-x64_bin.tar.gz jenkins-2.359-1.1.noarch.rpm redis-6.2.12.tar.gz

    jenkins2.235.zip

    将 `jenkins.war` 文件部署到Web服务器的`webapps`目录下,服务器会自动解压并运行该文件,启动Jenkins服务。这种方式更加灵活,因为你可以自定义Jenkins的运行环境和配置。 **Jenkins核心功能**: 1. **持续集成**...

    jenkins-2.164.2.zip

    压缩包内的"jenkins.msi"文件是Windows操作系统上的安装程序,用于在本地机器上安装Jenkins。安装过程中,系统会提示配置服务器端口、初始管理员密码等设置。安装完成后,可以通过Web界面访问Jenkins服务器,进行...

    jenkins.war包2.346.1版本

    部署过程包括将jenkins.war文件复制到Tomcat的webapps目录下,然后启动或重新启动Tomcat服务。一旦部署成功,用户可以通过浏览器访问 http://yourserver:8080/jenkins 来启动Jenkins的配置和使用。 在2.346.1版本中...

    jenkins.war jenkins.war jenkins.war

    jenkins.war jenkins.war jenkins.war jenkins.war

    jenkins-2.346.3.war

    jenkins-2.346.3.war

Global site tag (gtag.js) - Google Analytics