jsp驗證碼不能顯示 Could not initialize class sun.awt.X11GraphicsEnvironmenter

Could not initialize class sun.awt.X11GraphicsEnvironment  出現

此問題的原因是用戶無法訪問Xserver(如Xserver未啓動或沒有權限訪問或者display出錯等)。

解決辦法:

讓系統或者用戶 或者服務端程序工作在headless mode模式下。

(轉)1.       什麼是Headless mode

Headless模式是系統的一種配置模式。在該模式下,系統缺少了顯示設備、鍵盤或鼠標。

2.       何時使用和headless mode

Headless模式雖然不是我們願意見到的,但事實上我們卻常常需要在該模式下工作,尤其是服務器端程序開發者。因爲服務器(如提供Web服務的主機)往往可能缺少前述設備,但又需要使用他們提供的功能,生成相應的數據,以提供給客戶端(如瀏覽器所在的配有相關的顯示設備、鍵盤和鼠標的主機)。

3.       如何使用和Headless mode

一般是在程序開始激活headless模式,告訴程序,現在你要工作在Headless mode下,就不要指望硬件幫忙了,你得自力更生,依靠系統的計算能力模擬出這些特性來.

具體解決:

1. 在servlet裏開始處寫上:

                 System.setProperty("java.awt.headless","true");

2. 對於tomcat

 方法一:在tomcat的catalina.bat(catalina.sh)文件中加入下面的設置,當然SET CATALINA_OPTS 變量應該在使用它之前。這是在tomcat啓動時設置一些虛擬機參數,使服務器允許遠程連接功能,address=5888表示遠程連接的端口號,可以設置成任意其他不衝突端口。其他的應用服務器比如weblogic也應該可以設置這些參數,有興趣的可以測試。

SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5888
方法二:手工將catalina.bat中
set JPDA=
修改爲
set JPDA=jpda
set JPDA_TRANSPORT=dt_socket

set JPDA_ADDRESS=XXXX

3.對於Weblogic

修改啓動文件startWebLogic.bat(startWebLogic.sh,

${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} ${JAVA_OPTIONS} -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dweblogic.Name=${SERVER_NAME} -Dweblogic.ProductionModeEnabled=${PRODUCTION_MODE} -Xdebug -Xrunjdwp:transport=dt_socket,address=8131,server=y,suspend=n -Djava.security.policy="${WL_HOME}/server/lib/weblogic.policy" weblogic.Server

如上在相應的地方加上黃色部分。

4.對整個系統使用此模式

在/etc/profile 文件中加入

export CATALINA_OPTS= -Djava.awt.headless=true;

注:source /etc/profile 使修改生效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章