Xvfb图像缓冲引发java.awt.Headless异常

Xvfb图像缓冲引发java.awt.Headless异常,java,tomcat7,headless,xvfb,Java,Tomcat7,Headless,Xvfb,托管在tomcat 7.0.39中的java webapp需要xvbf写入图像并将其输出到客户端。当我打开处理图像写入的servlet时,会收到以下错误消息: 15.05.2013 21:24:56 org.apache.catalina.core.ApplicationContext log SCHWERWIEGEND: StandardWrapper.Throwable java.awt.HeadlessException at java.awt.GraphicsEnvironmen

托管在tomcat 7.0.39中的java webapp需要xvbf写入图像并将其输出到客户端。当我打开处理图像写入的servlet时,会收到以下错误消息:

15.05.2013 21:24:56 org.apache.catalina.core.ApplicationContext log
SCHWERWIEGEND: StandardWrapper.Throwable
java.awt.HeadlessException
    at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
    at java.awt.Window.<init>(Window.java:414)
    at java.awt.Frame.<init>(Frame.java:403)
    at java.awt.Frame.<init>(Frame.java:368)
    at serv.GroupOverview.init(GroupOverview.java:46)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:865)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
15.05.2013 21:24:56 org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Allocate exception for servlet GroupOverview
java.awt.HeadlessException
    at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)
    at java.awt.Window.<init>(Window.java:414)
    at java.awt.Frame.<init>(Frame.java:403)
    at java.awt.Frame.<init>(Frame.java:368)
    at serv.GroupOverview.init(GroupOverview.java:46)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:865)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)

如何解决这个问题?

我不明白为什么您认为需要xvfb在无头环境中写入图像。 您当然可以在没有xvfb的情况下进行图像(甚至是图形2d)操作和ImageIO。我在没有xvfb的无头环境中进行TIFF转换、颜色模型转换等,无需创建框架。你可能想挖得更深一点


但作为一个快速解决方案,请尝试设置-Djava.awt.headless=true,看看这是否有帮助。

主要是因为我不懂任何java,我尝试使用一个系统,该系统在我对服务器进行一些更新之前已经存在并正在工作,因为我将在接下来的几天中进行其他编程工作。但是如果你能推荐一个教程或一个博客,用Graphics2D来解释imageIO,我很乐意试一试。B:我确实需要更改java程序中的一些代码。它与图像读写过程有关,而与xvfb无关。我使用url方法而不是加载文件。RHEL 5是承载应用程序的平台,它已经过时,因为它是从2002年开始的。我仍然同情你没有理解。我同情你。谢谢你的帮助!你给我的建议也失败了。如果是2002年的,它运行的是哪个版本的JDK?无头模式直到1.4IIRC才被添加…jdk版本是1.5、1.6或1.7。我尝试了这三种方法,看看jdk是否有什么不同,但对所有方法都抛出了相同的错误。我已经在另一台服务器上使用了一个较新的linux解决了这个问题,在那里小程序可以正常工作。
public void init(ServletConfig servletConfig) throws ServletException {
    super.init(servletConfig);
    //
    m_frame = new Frame();  // Line 46 in GroupOverview.java
    m_frame.addNotify(); 
}