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 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 使修改生效。