Could not initialize class sun.awt.X11GraphicsEnvironmen異常處理

問題:

  1. 今天在部署上線時遇到了,Could not initialize class sun.awt.X11GraphicsEnvironmen這個異常信息。下面分享下個人的出現問題的地方和處理的方法。
  2. 我是在使用Graphics2D處理圖片過程中遇到的這個異常,經查,出現這種情況一般就是啓動tomcat的用戶無法訪問Xserver,包括Xserver沒有啓動或者沒有權限訪問。

Could not initialize class sun.awt.X11GraphicsEnvironmen異常解決辦法

  1. 在Tomcat容器的catalina.sh文件中添加圖中圈住部分內容:
    -Djava.awt.headless=true \
    在這裏插入圖片描述
    修改後重啓Tomcat
  2. 在報錯的servlet或者action接口處,添加:
    System.setProperty(“java.awt.headless”, “true”);

修改過上面兩處後,重啓即可正常使用。

X11GraphicsEnvironmen分析

X11GraphicsEnvironment會調用操作系統的X server來生成圖片。但是在操作系統的headless mode下,是沒有X server的,所以使用X11GraphicsEnvironment時就會報錯。
在使用Graphics2D處理圖片是,需要使用到顯示器,在linux系統下,就出現了對Headless mode的使用。

  1. 什麼是Headless mode?
    Headless模式是系統的一種配置模式。在該模式下,系統缺少了顯示設備、鍵盤或鼠標。
  2. 何時使用和headless mode?
    Headless模式雖然不是我們願意見到的,但事實上我們卻常常需要在該模式下工作,尤其是服務器端程序開發者。因爲服務器(如提供Web服務的主機)往往可能缺少前述設備,但又需要使用他們提供的功能,生成相應的數據,以提供給客戶端(如瀏覽器所在的配有相關的顯示設備、鍵盤和鼠標的主機)。
  3. 如何使用和Headless mode?
    一般是在程序開始激活headless模式,告訴程序,現在你要工作在Headless mode下,就不要指望硬件幫忙了,你得自力更生,依靠系統的計算能力模擬出這些特性來:
    System.setProperty(“java.awt.headless”, “true”);
  4. 要麼這樣試試,應該也可以。在servlet裏一開始寫一句:
    System.setProperty(“java.awt.headless”,“true”);
      web服務器的java虛擬機必須加以個參數java.awt.headless=true
      以tomcat爲例
      可以在/etc/profile或啓動web服務的用戶的.bash_profile中的CATALINA_OPTS變量中加入:
    CATALINA_OPTS="… -Djava.awt.headless=true"
      其他的也可以看看啓動腳本。只要加上這個參數就沒問題了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章