一、問題
javaweb項目,登錄的時候有個圖片驗證碼的功能。在Windows本地測試能夠正常顯示,部署到Linux上就不行了。報錯如下:
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError:
Could not initialize class sun.awt.X11FontManager
二、解決
經查,與這個有關:
1.什么是Headless mode?
Headless模式是系統的一種配置模式。在該模式下,系統缺少了顯示設備、鍵盤或鼠標。2.何時使用和headless mode?
Headless模式雖然不是我們願意見到的,但事實上我們卻常常需要在該模式下工作,尤其是服務器端程序開發者。因為服務器(如提供Web服務的主機)往往可能缺少前述設備,但又需要使用他們提供的功能,生成相應的數據,以提供給客戶端(如瀏覽器所在的配有相關的顯示設備、鍵盤和鼠標的主機)。3.如何使用和Headless mode?
一般是在程序開始激活headless模式,告訴程序,現在你要工作在Headless mode下,就不要指望硬件幫忙了,你得自力更生,依靠系統的計算能力模擬出這些特性來:
System.setProperty("java.awt.headless","true")
第一步:在tomcat/bin/catalina.sh文件中增加一行配置,並且重啟tomcat
#解決登錄驗證碼圖片顯示不了的bug
CATALINA_OPTS=-Djava.awt.headless=true
然后還是不行,還是會報錯:沒有這個依賴 libgcc_s.so.1
org.springframework.web.util.NestedServletException: Handler processing failed;
nested exception is java.lang.UnsatisfiedLinkError: /usr/src/java/jdk/jdk1.7.0_71/jre/lib/i386/libfontmanager.so: libgcc_s.so.1: cannot open shared object file: No such file or directory
第二步:運行如下命令,重啟tomcat即可
[root@mail tomcat7-8080]# yum install libgcc.i686 --setopt=protected_multilib=false [root@mail tomcat7-8080]# yum grouplist [root@mail tomcat7-8080]# yum groupinstall Fonts
三、 另外一種解決方案
生成圖片的java文件里寫:
public class RandomNumUtil { static{ System.setProperty("java.awt.headless", "true"); } }
四、參考
https://blog.csdn.net/weixin_34381666/article/details/91900916
https://www.cnblogs.com/hwaggLee/p/5454463.html
https://www.cnblogs.com/wudi-dudu/p/7792721.html