jfreechart Struts2 IllegalStateException 异常处理

jfreechart Struts2 IllegalStateException 异常处理

解决jfreechart 在struts2中 产生 java.lang.IllegalStateException

在使用jfreechart 与 strutst2整合时,jfreechart生成图片的时候在服务器后台会产生如下的错误,但是图片却能够正常的显示出来。

[ERROR] [2009-11-13 15:32:57] Servlet.service() for servlet default threw exception - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260) 
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:405)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:725)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)

如果不解决此异常,当被STRUTS2的异常拦截器处理时,会把响应返回到我们定义的页面去,就无法实现jfreechart多次刷新来实现监控这类型的功能。

错误分析主要是servlet 在将jfreechart向页面输出的时候回产生IMGIO的异常,我们在struts2的jfreechart中将其捕获,则可以处理掉这个异常。

public void execute(ActionInvocation invocation) throws Exception {
        if (!chartSet) // if our chart hasn't been set (by the testcase), we'll look it up in the value stack
            chart = (JFreeChart) invocation.getStack().findValue(value, JFreeChart.class);
        if (chart == null) // we need to have a chart object - if not, blow up
            throw new NullPointerException("No JFreeChart object found on the stack with name " + value);
        // make sure we have some value for the width and height
        if (height == null)
            throw new NullPointerException("No height parameter was given.");
        if (width == null)
            throw new NullPointerException("No width parameter was given.");

        // get a reference to the servlet output stream to write our chart image to
        OutputStream os = ServletActionContext.getResponse().getOutputStream();
        try {
            // check the type to see what kind of output we have to produce
            if ("png".equalsIgnoreCase(type))
                ChartUtilities.writeChartAsPNG(os, chart, width, height);
            else if ("jpg".equalsIgnoreCase(type) || "jpeg".equalsIgnoreCase(type))
                ChartUtilities.writeChartAsJPEG(os, chart, width, height);
            else
                throw new IllegalArgumentException(type + " is not a supported render type (only JPG and PNG are).");
        } finally {
            if (os != null) os.flush();
        }
    }
这是 ChartResult 类中执行图片输出的方法 我们将

OutputStream os = ServletActionContext.getResponse().getOutputStream();

的异常捕获起来 则可解决此问题

修改后打jar包,替换原来的文件即可


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值