您的位置:首页 > 编程语言 > Java开发

服务器保存png图片失败java.lang.NoClassFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment

2012-09-29 10:08 357 查看
一、问题描述

C/S结构中,Server端在保存Client端上传的png图片时失败,经查log发现错因是java.lang.NoClassFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment(如下图)。系统原来运行没出现过这个问题,现在唯一的变量是启动server的用户由普通用户改为root。



二、原因分析

经过Google发现很多人也出现同样的问题。从了解了X11GraphicEnvironment这个类的功能入手,一个Java服务器来处理图片的API基本上是需要运行一个X-server以便能使用AWT(Abstract Window Toolkit,抽象窗口工具集)。所以,问题肯定出在启动server时,未能实现X-Server功能。root用户未启动XServer,mmcse中启动了XWindow。so问题来了。

三、解决方案

1. 安装XServer(忽略,因为服务器本身软硬件环境基本没动过);

2. 运行headless服务器-Djava.awt.headless=true (需要JDK1.4以上版本)。重点来看这种解决方案(详见参考资料,但主要涉及的是Webapp,设置webserver。我们的场景是在applet client作图,然后在server端处理成png并保存)

具体解决办法:在各个server服务的java -jar启动命令增加选项-Djava.awt.headless=true,问题解决(Google是王道)!!

如果是在web server中,则在server的启动脚本中增加相同选项。

四、参考资料

1. linux中servlet画图问题的解决

2. Java官网的headless support

3. 2008-08-26 08:57 java.awt.headless=true的含义
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: