2013-05-15 5 views
0

My java webapp, размещенный в tomcat 7.0.39, нуждается в xvbf для записи в изображения и вывода их клиенту. Когда я открываю сервлет, который обрабатывает запись изображения, я получаю следующее сообщение об ошибке:Xvfb-буферизация изображений вызывает java.awt.Headless exception

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) 

Блок кода, где брошена ошибка заключается в следующем:

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

Как решить эту проблему ?

ответ

0

Я не понимаю, почему вы думаете, что вам нужно xvfb писать изображения в безголовой среде. Вы, безусловно, можете сделать изображение (даже Graphics2D) и ImageIO без xvfb. Я делаю преобразования TIFF, преобразования цветовой модели и т. Д. В безголовой среде без xvfb и без необходимости создавать Frame. Вы можете захотеть копать немного глубже.

Но в качестве быстрого исправления попробуйте установить -Djava.awt.headless = true и посмотреть, поможет ли это.

+0

В основном это потому, что я не знаю ни одной java, и я пытаюсь использовать систему, которая уже была там, и работая до того, как я сделал некоторые обновления на нашем сервере из-за других программных работ, которые я буду делать в следующие дни. Но если вы можете порекомендовать учебник или блог, который объясняет imageIO с помощью Graphics2D, я буду рад попробовать. – nuxxxx

+0

bvamer: Мне нужно было изменить код в программе java. Он швы связан с процедурой записи чтения изображения, а не с xvfb. Я использовал метод url вместо загрузки файла. RHEL 5, которая является платформой, на которой размещено приложение, устарела, поскольку она с 2002 года. Я все еще чувствую сочувствие, потому что вы не понимаете. У вас есть мое сострадание. Спасибо, что пытались помочь! Предложение, которое вы мне дали, тоже не удалось. – nuxxxx

+0

Если это с 2002 года, какая версия JDK работает? режим без звука не был добавлен до 1,4 iirc ... – bvarner