在java中使用awt在服務器上處理圖片的時候發現有錯:
第一遍執行
500 Servlet Exception
java.lang.InternalError: Can't connect to X11 window server using ':0.0'
as the value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:134)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1041)
at com.lodesoft.ipniii.club.tool.AlbumTool.createSmallThumb(AlbumTool.java:793)
at com.lodesoft.ipniii.club.test.action.UpdateAllPhotoAction.perform(UpdateAllPhotoAction.java:82)
at org.apache.struts.action.Action.execute(Action.java:420)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:113)
at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:211)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:177)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:221)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:262)
at com.caucho.server.port.TcpConnection.run(TcpConnection.java:315)
at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:353)
at com.caucho.util.ThreadPool.run(ThreadPool.java:302)
at java.lang.Thread.run(Thread.java:534)
--------------------------------------------------------------------------------
Resin-3.0.6 (built Tue, 20 Jan 2004 09:46:57 PST)
然后刷新這個頁面
500 Servlet Exception
java.lang.NoClassDefFoundError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1041)
at com.lodesoft.ipniii.club.tool.AlbumTool.createSmallThumb(AlbumTool.java:793)
at com.lodesoft.ipniii.club.test.action.UpdateAllPhotoAction.perform(UpdateAllPhotoAction.java:82)
at org.apache.struts.action.Action.execute(Action.java:420)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:113)
at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:211)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:177)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:221)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:262)
at com.caucho.server.port.TcpConnection.run(TcpConnection.java:315)
at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:353)
at com.caucho.util.ThreadPool.run(ThreadPool.java:302)
at java.lang.Thread.run(Thread.java:534)
--------------------------------------------------------------------------------
Resin-3.0.6 (built Tue, 20 Jan 2004 09:46:57 PST)
我們的服務器上沒有安裝xwindows,但是安裝了XFree86的相關包。web server用的是 Resin 306 ,現在找到了解決方法。
1:安裝XFree86-Xvfb-4.3.0-2.i386.rpm。如果什么XFree86的相關包都沒有,那就要弄來裝一裝了。起碼的libs是要有的。
2:使用兩個命令:
------------------------------------
Xvfb :0 -screen 0 800x600x16 & 啟動Xwindows的虛擬設備
export DISPLAY=localhost:0.0 配置本地環境
------------------------------------
運行順序先后沒有太大的關系。
注意的是 Xvfb :0 -screen 0 中的兩個0的參數和后面 DISPLAY=localhost:0.0 中的兩個0是對應的。Xvfb實現的應該是后臺虛擬擬圖形界面環境。
3:可以把這兩個命令做成啟動就運行的腳本,也可以在啟動Resin的時候調用起來,我用的后者
修改resin ./bin 目錄下的httpd.sh 在JAVA_HOME 配置項前加入
Xvfb :0 -screen 0 800x600x16 &
export DISPLAY=localhost:0.0
4:其實沒有什么第四,因為這樣就可以啦。
200408220127 :今天來增加一條,如果安裝liunx的時候沒有選擇安裝任何xwindows的組件,那么從linux安裝盤上去取Xvfb的包安裝是不會成功的,因為還需要一大堆依賴的包,而我就因為找不到這些包,不能加快進度而加班到昨天早上4點多。慶幸的是我找到了一個好辦法去解決(不然可能要拖到5,6點才能結束),我在XFree86的官方站點上 http://XFree86.org 找到了一個Xvfb的tag下載,下來后解壓出來就可以用了,哈哈哈哈。要注意的是要去找版本對應的tag包,比如RedHat 9對應的是XFree86 4.3.0 的版本,就去它的FTP下載相應版本的包,取下來后解壓出bin目錄,運行其中Xvfb就可以,記得加參數哦!