Linux下java驗證碼不顯示:Could not initialize class sun.awt.X11FontManager


一、問題

 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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM