根据JasperReports权威指南– Teodor Danciu,Lucian Chirita,第130页,我在JasperReports 6.7.0中使用javaflow的子报表存在问题。我需要它以避免在报告在我们的应用程序中调用时调用不同的线程,因为有价值的原因。
default.jasperreport.properties
处有设置
net.sf.jasperreports.subreport.runner.factory=net.sf.jasperreports.engine.fill.JRContinuationSubreportRunnerFactory
当我运行包含5行以上的报表时,出现错误:
java.lang.IllegalStateException:挂起时堆栈损坏(空 堆)。是 net.sf.jasperreports.engine.fill.JRContinuationSubreportRunner @ 2024896527 / org.apache.catalina.loader.WebappClassLoader @ 1847497893 为javaflow进行检测? 在org.apache.commons.javaflow.core.StackRecorder.execute(StackRecorder.java:131) 在org.apache.commons.javaflow.api.Continuation $ MultiShotContinuation.resumeWith(Continuation.java:521) 在org.apache.commons.javaflow.api.Continuation.resume(Continuation.java:314) 在org.apache.commons.javaflow.api.Continuation.startWith(Continuation.java:219) 在org.apache.commons.javaflow.api.Continuation.startWith(Continuation.java:169) 在org.apache.commons.javaflow.api.Continuation.startWith(Continuation.java:148) 在net.sf.jasperreports.engine.fill.JRContinuationSubreportRunner.start(JRContinuationSubreportRunner.java:53) 在net.sf.jasperreports.engine.fill.JRFillSubreport.prepare(JRFillSubreport.java:931) 在net.sf.jasperreports.components.table.fill.FillTableSubreport.prepareSubreport(FillTableSubreport.java:175) 在net.sf.jasperreports.components.table.fill.FillTable.prepare(FillTable.java:424) 在net.sf.jasperreports.engine.fill.JRFillComponentElement.prepare(JRFillComponentElement.java:152) 在net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:542) 在net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:453) 在net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:428) 在net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2585) 在net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:813) 在net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:264) 在net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:110) 在net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:615) 在net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:413) 在net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:120) 在net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:103) 在org.wgsoftpro.reposerver.SetReport.fillReport(SetReport.java:469) 在org.wgsoftpro.reposerver.SetReport.runReport(SetReport.java:190) 在org.wgsoftpro.reposerver.CreateReport.run(CreateReport.java:454) 在org.apache.catalina.core.AsyncContextImpl $ RunnableWrapper.run(AsyncContextImpl.java:557) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) 在java.lang.Thread.run(Thread.java:748)
如果行数较少,报表运行就没有问题。
我在pom.xml上具有依赖性,以获取org.apache.commons.javaflow.api
<dependency>
<groupId>net.tascalate.javaflow</groupId>
<artifactId>net.tascalate.javaflow.api</artifactId>
<version>2.4.0</version>
</dependency>
任何建议都将被估计。
更新: 我在使用net.tascalate.javaflow.api版本2.2.1时遇到了相同的错误
更新2:我发现,如果我们使pageHeight更大并且所有数据都适合一页,则一切正常。因此问题与第二页初始化有关
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="vetmed" language="javascript" pageWidth="595" ***pageHeight="1500"*** columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="c2935bae-a905-4770-8aca-21bb3b76afde">
答案 0 :(得分:1)
未在JavaFlow上检测香草JasperReports jar(在Maven上发布)。
有一个罐子的变种,可以从SourceForge下载,请参阅jasperreports-javaflow-6.7.0.jar
但是该jar尚未在Maven上发布,因此您需要找到一种在构建中使用它的方法。有关某些方法,请参见this answer。
答案 1 :(得分:0)
公开:我是Tascalate JavaFlow库的维护者。 看起来您在构建过程中没有检测必要的可延续类。
Tascalate Javaflow同时提供了Ant任务和Maven插件,我不确定哪种方法最适合Jasper Reports,但是您可以选择: -将Maven构建插件包含在here中。 -与此example一样设置Ant。
或者您可能在调用链上混合了可连续/不可连续方法。
此外,根据Maven Central上的信息,Jasper Reports 6.7使用Tascalate JavaFlow 2.2.1 –创建一个添加更高版本(2.4.0)的版本化地狱是一个坏主意