我有多个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检查)