剛剛在一台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 /
然后問題就解決了。