现在的位置: 首页 > Linux > Web技术 > 正文
tomcat报Could not initialize class sun.awt.X11GraphicsEnvironment错误处理
2014年08月30日 Web技术 ⁄ 共 2144字 暂无评论 ⁄ 被围观 4,305 views+

公司一个应用验证码出不来,查看日志报错如下:

严重: Servlet.service() for servlet checkimage threw exception
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)
        at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1135)
        at java.awt.image.BufferedImage.getGraphics(BufferedImage.java:1125)
        at com.sinovatech.b2b.util.CodeVerifyServletUnSession.service(CodeVerifyServletUnSession.java:30)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:615)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:394)

处理方法为:

在tomcat的启动参数JAVA_OPTS中,添加-Djava.awt.headless=true 参数。

我的站点我是在Catalina.sh中直接添加一行JAVA_OPTS参数设置,具体如下(内存请根据自己实际情况调整):

JAVA_OPTS="-server -Xms600m -Xmx600m -XX:PermSize=128m -XX:MaxPermSize=256m -Djava.awt.headless=true"

经分析,出现这种情况一般就是启动tomcat的用户无法访问Xserver,包括Xserver没有启动或者没有权限访问.

以下为转贴:

1.什么是Headless mode? 
Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。

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

3.如何使用和Headless mode?
一般是在程序开始激活headless模式,告诉程序,现在你要工作在Headless mode下,就不要指望硬件帮忙了,你得自力更生,依靠系统的计算能力模拟出这些特性来:
System.setProperty("java.awt.headless","true");

给我留言

留言无头像?


×