0

My java webapp hosted within a tomcat 7.0.39 needs xvbf to write into images and output them to the client. When I open the servlet which handles the image writing I get the following error message:

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)

The block of code where the error is thrown is the following:

public void init(ServletConfig servletConfig) throws ServletException {
    super.init(servletConfig);
    //
    m_frame = new Frame();  // Line 46 in GroupOverview.java
    m_frame.addNotify(); 
}

How do I solve this issue?

nuxxxx
  • 223
  • 2
  • 13

1 Answers1

0

I fail to understand why you think you need xvfb to write to images in a headless environment. You most certainly can do image (even Graphics2D) manipulation and ImageIO without xvfb. I do TIFF transformations, color model conversions, etc. in a headless environment without xvfb, and without needing to create Frame. You may want to dig a bit deeper.

But as a quick fix, try setting -Djava.awt.headless=true and see if that helps.

bvarner
  • 363
  • 3
  • 9
  • Mostly it is because I don't know any java and I try to use a system which already was there and working before I did some updates on our server due other programming work I'll be doing in the next days. But if you can recommend a tutorial or a blog which explains imageIO with Graphics2D I'll be glad to give it a try. – nuxxxx May 16 '13 at 07:18
  • bvamer: I did have to change some code in the java program. It seams it is related to the image read write procedure and not to xvfb. I used the url method instead of loading a file. RHEL 5 which is the platform the application is hosted on, is outdated, since it is from 2002. I still feel sympathetic for you failing to understand. You have my compassion. Thank you for trying to help! The suggestion you gave me failed also. – nuxxxx May 17 '13 at 20:54
  • If it's from 2002, what version of the JDK is it running on? headless mode wasn't added until 1.4 iirc... – bvarner May 21 '13 at 19:33
  • jdk version is 1.5, or 1.6 or 1.7. I tried all three of them to see if the jdk makes any difference, but the same error is thrown for all of them. I already solved the problem by using a more recent linux on a alternative server, where the applet works fine. – nuxxxx May 22 '13 at 21:13