1. 程式人生 > >驗證碼無法顯示:Could not initialize class sun.awt.X1 解決方案

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

網站驗證碼突然無法顯示,並報如下錯誤。

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為例,總共有七處這樣的地方,修改好後即可。