在java中使用awt在服務(wù)器上處理圖片的時(shí)候發(fā)現(xiàn)有錯(cuò):
第一遍執(zhí)行
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)
然后刷新這個(gè)頁(yè)面
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)
我們的服務(wù)器上沒有安裝xwindows,但是安裝了XFree86的相關(guān)包。web server用的是 Resin 306 ,現(xiàn)在找到了解決方法。
1:安裝XFree86-Xvfb-4.3.0-2.i386.rpm。如果什么XFree86的相關(guān)包都沒有,那就要弄來裝一裝了。起碼的libs是要有的。
2:使用兩個(gè)命令:
------------------------------------
Xvfb :0 -screen 0 800x600x16 & 啟動(dòng)Xwindows的虛擬設(shè)備
export DISPLAY=localhost:0.0 配置本地環(huán)境
------------------------------------
運(yùn)行順序先后沒有太大的關(guān)系。
注意的是 Xvfb :0 -screen 0 中的兩個(gè)0的參數(shù)和后面 DISPLAY=localhost:0.0 中的兩個(gè)0是對(duì)應(yīng)的。Xvfb實(shí)現(xiàn)的應(yīng)該是后臺(tái)虛擬擬圖形界面環(huán)境。
3:可以把這兩個(gè)命令做成啟動(dòng)就運(yùn)行的腳本,也可以在啟動(dòng)Resin的時(shí)候調(diào)用起來,我用的后者
修改resin ./bin 目錄下的httpd.sh 在JAVA_HOME 配置項(xiàng)前加入
Xvfb :0 -screen 0 800x600x16 &
export DISPLAY=localhost:0.0
4:其實(shí)沒有什么第四,因?yàn)檫@樣就可以啦。
200408220127 :今天來增加一條,如果安裝liunx的時(shí)候沒有選擇安裝任何xwindows的組件,那么從linux安裝盤上去取Xvfb的包安裝是不會(huì)成功的,因?yàn)檫€需要一大堆依賴的包,而我就因?yàn)檎也坏竭@些包,不能加快進(jìn)度而加班到昨天早上4點(diǎn)多。慶幸的是我找到了一個(gè)好辦法去解決(不然可能要拖到5,6點(diǎn)才能結(jié)束),我在XFree86的官方站點(diǎn)上 http://XFree86.org 找到了一個(gè)Xvfb的tag下載,下來后解壓出來就可以用了,哈哈哈哈。要注意的是要去找版本對(duì)應(yīng)的tag包,比如RedHat 9對(duì)應(yīng)的是XFree86 4.3.0 的版本,就去它的FTP下載相應(yīng)版本的包,取下來后解壓出bin目錄,運(yùn)行其中Xvfb就可以,記得加參數(shù)哦!