驗證碼無法顯示:Could not initialize class sun.awt.X1 解決方案


網站驗證碼突然無法顯示,並在tomcat localhost文件中報如下錯誤。

Caused by: java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment

Caused by: java.lang.InternalError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.

 

網上搜索了一下,在catalina.sh里加上一句“-Djava.awt.headless=true \”,問題解決。

經查,出現這種情況一般就是啓動tomcat的用戶無法訪問Xserver,包括Xserver沒有啓動或者沒有權限訪問.

 

以下爲轉貼:

1.什麼是Headless mode? 

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

 

2.何時使用和headless mode?

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

 

3.如何使用和Headless mode?

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

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

 

修改${TOMCAT_HOME}/bin/catalina.sh或${TOMCAT_HOME}/bin/catalina.bat文件:

在所有類似以下代碼:

    "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \

      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \

      -Djava.security.manager \

      -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \

      -Dcatalina.base="$CATALINA_BASE" \

      -Dcatalina.home="$CATALINA_HOME" \

      -Djava.io.tmpdir="$CATALINA_TMPDIR" \

 

在尾部加上一句:

      -Djava.awt.headless=true \

 

修改後內容如下:

    exec "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \

      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \

      -Dcatalina.base="$CATALINA_BASE" \

      -Dcatalina.home="$CATALINA_HOME" \

      -Djava.io.tmpdir="$CATALINA_TMPDIR" \

      -Djava.awt.headless=true \

 

以tomcat6.0爲例,總共有七處這樣的地方,修改好後即可。


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