碧玉报告:子报表导致一个无限循环(Jasper Reports : sub-reports are

2019-08-01 14:33发布

我有多个Jasper报表 (含子报表)在我的应用程序。 出于某种原因,一个报告(也包含子报表)不工作了。 调试超过1天之后,我发现它进入一个无限循环,并保持创建子报表填充线程。

调试器之间不断循环:

JRSubReportRunnable.java

public void run()
{
    running = true;     
    error = null;

    try
    {
        fillSubreport.fillSubreport();
    }
    catch (JRFillInterruptedException e)
    {
        //If the subreport filler was interrupted, we should remain silent
    }
    // we have to catch Throwable, because it is difficult to say what would happen with the master
    // filler thread in case we don't
    catch (Throwable t) //NOPMD
    {
        error = t;
    }

    running = false;
}

以上方法,以填补一个子报告启动一个线程。 一旦完成,台running = false和调试器获取到:

JRThreadSubreportRunner.java

public void run()
{
    super.run();

    if (log.isDebugEnabled())
    {
        log.debug("Fill " + subreportFiller.fillerId + ": notifying of completion");
    }

    synchronized (subreportFiller)
    {
        //main filler notified that the subreport has finished
        subreportFiller.notifyAll();
    }
}

一旦线程完成,它就会以上述的方法subreportFiller.notifyAll(); 线。 然后,调试器可以追溯到JRSubreportRunnable.java,等等。

从理论上讲,如果我有5个子报告,它应该创建5个线程(对我的作品在其他报告中)。 不幸的是,这种情况下,它使创建线程,和我的调试器获得上述2种方法之间的“卡壳”(FYI:类是从JasperReports的-3.7.6-sources.jar)。

也尝试:

我发现了一个类似的StackOverflow的问题 ,但答案提出的有没有为我工作。 也没有任何一个提出的解决方案,从这个线程上的JasperSoft社区 。

我实在想不通为什么会出现这个问题。 我相信这是东西,因为它用来工作未成年人。 希望别人偶然发现了这一点,并可能有一个解决方案。 感谢您事先的任何答复。 (我知道我还没有提供关于我的子报告的内容实在太多信息,但它是相当私人,不过,我可以向你保证,该报告的内容和相关的子报表并没有改变 - 使用Git检查)

Answer 1:

我有完全相同的问题,并从真正改变我的报表的isPrintWhenDetailOverflows属性设置为false解决了在这里建议: http://community.jaspersoft.com/questions/527078/infinite-loop-subreport-fill

希望能帮助到你



文章来源: Jasper Reports : sub-reports are causing an infinite loop