刚刚在一台Linux服务器上安装了jdk和Tomcat,然后部署了一个web项目,在项目中有个添加图片的功能,保存图片时报错
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class javax.imageio.ImageIO
和
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.UnsatisfiedLinkError: /home/software/jdk1.7.0_65/jre/lib/i386/xawt/libmawt.so: libXext.so.6: cannot open shared object file: No such file or directory
网上说是jdk安装了32位的,应该安装64位的。然后我就将jdk删除重装了64位的。
如何查看jdk是多少位方法:
使用 java -version
即可。
如果是安装了32位的jdk,则输出信息如下:
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) Server VM (build 25.144-b01, mixed mode)
上面的输出信息中没包含64bit。
如果是安装了64位的jdk,则输出信息如下:
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
jdk由32位改为64位后,启动项目,保存图片时又报错了,报错信息如下
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
和
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.InternalError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
百度了一下这个问题,基本上都说是如下原因:
原因是windows内核集成了gui,而linux上没有启动x server
解决办法:
1。启动x server
2。在java运行参数上加-Djava.awt.headless=true
我修改了应用服务器的启动文件。tomcat中的/bin/catalina.sh文件,
在所有的 -Dcatalina.home="$CATALINA_HOME" /下面都加上了
-Djava.awt.headless=true /
然后问题就解决了。