问题描述
Weblogic应用中,有个上传图片功能,总是在上传时终止执行,无法上传成功。
服务器的Weblogic环境配置:
* jdk1.6.0_18 + linux-64
* Oracle Weblogic Server 10.3.3.0
后台报错信息:
<2015-8-7 下午07时24分08秒 CST> <Error> <HTTP> <BEA-101017> <[ServletContext@21247461[app:img_system module:img_system.war path:/img_system spec-version:null]] Root cause of ServletException.
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at java.awt.Toolkit$2.run(Toolkit.java:834)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:826)
Truncated. see log file for complete stacktrace
>
从报错信息分析,是找不到类,无法初始化sun.awt.X11.XToolkit。
解决方案
在Weblogic的启动脚本中,修改Java命令启动选项,增加“-Djava.awt.headless=true”,以启用Headless模式,然后重启Weblogic即可。
其他可能方案:更新jdk,目前环境采用的jdk为jdk1.6.0_18,版本比较旧。
原因分析
java.awt.toolkit和java.awt.graphicsenvironment类中有许多方法,除了对字体,图像和打印的操作外还有调用显示器,键盘和鼠标的方法。对于Linux环境,则需要依赖X-server的支持,然而因为某些原因导致无法初始化而报错。此时,可以采用JRE提供的headless模式(从J2SE 1.4开始Java平台提供了对Headless模式的支持)。
关于Headless模式,是指在缺少显示屏、键盘或鼠标时的系统配置。当系统应用需要自行生成图片时,可能会用到该模式。