java.awt.AWTError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
程序部署在tomcat上,再页面将查询结果进行Excel导出下载的时候报错了,在tomcat/logs/localhost.yyyy-mm-dd.log(当天日期的日志)文件中找到了报错信息,报错信息如下:
Servlet[springMVC]的Servlet.service()引发了具有根本原因的异常Handler dispatch failed; nested exception is java.awt.AWTError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
java.awt.AWTError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:65)
at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:115)
at java.security.AccessController.doPrivileged(Native Method)
at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:74)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:103)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
at sun.awt.X11FontManager.isHeadless(X11FontManager.java:509)
at sun.awt.X11FontManager.getFontPath(X11FontManager.java:786)
at sun.font.SunFontManager.getPlatformFontPath(SunFontManager.java:3282)
at sun.font.SunFontManager$10.run(SunFontManager.java:3308)
at java.security.AccessController.doPrivileged(Native Method)
at sun.font.SunFontManager.loadFonts(SunFontManager.java:3304)
at sun.awt.X11FontManager.loadFonts(X11FontManager.java:460)
at sun.font.SunFontManager.findFont2D(SunFontManager.java:2348)
..........................
出现这个报错的原因是linux上未开启x server,我们需要在tomcat上配置一下,把它开起来
需要加上JAVA_OPTS="-Djava.awt.headless=true"
解释一下headless
Headless模式是系统的一种配置模式。在系统可能缺少显示设备、键盘或鼠标这些外设的情况下可以使用该模式。Headless模式虽然不是我们愿意见到的,但事实上我们却常常需要在该模式下工作,尤其是服务器端程序开发者。因为服务器(如提供Web服务的主机)往往可能缺少前述设备,但又需要使用他们提供的功能,生成相应的数据,以提供给客户端(如浏览器所在的配有相关的显示设备、键盘和鼠标的主机)。
需要修改的tomcat配置文件是/tomcat目录/bin/catalina.sh
搜索一行:
图中fi 后的JAVA_OPTS是修改后的,原来只有绿色被注释了的那行,
如果不涉及jvm的性能调优的话,直接这么写就可以了:
JAVA_OPTS="-Djava.awt.headless=true"
如果涉及jvm的性能调优的话就在其中加上-Djava.awt.headless=true即可,如:
JAVA_OPTS="-server -Xms1536M -Xmx1536M -Xss256K -XX:MetaspaceSize=256M -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/api/gc_logs/gc.log"
包括了初始堆大小,最大堆大小,栈大小分配,GC日志等
原文链接:https://blog.csdn.net/weixin_40208575/article/details/104181260