把開發好的代碼,放到Linux服務器上面,有的Linux服務器可以顯示,有的沒有顯示。
經過對比,發現該問題更深一步是這樣:
1 如果以init 5的級別啓動centos系統,再啓動tomcat,在客戶端瀏覽器上查看驗證碼圖形顯示正常;
2 如果以init 3的級別啓動centos系統,再啓動tomcat,在客戶端瀏覽器上查看驗證碼圖形顯示顯示爲小紅叉;
這是很重要的結論,這個錯誤是因爲圖表程序是通過AWT實現的,AWT會調用操作系統本地窗口資源繪圖,windows對此支持很好,
在linux下如果沒有進到X window,AWT就不能繪圖。
代碼如下
// 在內存中創建圖象 // 獲取圖形上下文 //獲取輸出流: …………………………………………………… |
執行到這一行的時候報錯Graphics g = image.getGraphics();
報的錯誤如下:
有的服務器出現的是,Error 請聯繫系統管理員
有的服務器是報下面的錯誤:
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
第一種方法加入:-Djava.awt.headless=true ,沒有解決
在catalina.sh中,450行左右加入
-Djava.awt.headless=true \
加了之後是報別的錯誤
org.apache.jasper.JasperException: javax.servlet.ServletException: java.awt.AWTError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
javax.servlet.ServletException: java.awt.AWTError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
java.awt.AWTError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
】
第二種方法:在catalina.sh文件裏面加入,可以順利解決
export CATALINA_OPTS="-Djava.awt.headless=true"