1

根据 The Definitive Guide to JasperReports – Teodor Danciu,Lucian Chirita,第 130 页,我在使用带有 Jasperreport 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。

如果行数较少,则报告运行没有问题。

我在 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">
4

2 回答 2

2

原版 JasperReports jar(在 Maven 上发布)未针对 JavaFlow 进行检测。

可以从SourceForge下载 jar 的一个变体,请参阅 jasperreports-javaflow-6.7.0.jar

但是那个 jar 没有在 Maven 上发布,所以你需要找到一种方法在你的构建中使用它。有关执行此操作的一些方法,请参见此答案

于 2019-02-17T16:40:01.707 回答
0

披露:我是 Tascalate JavaFlow 库的维护者。看起来您在构建期间没有检测必要的可连续类。

Tascalate Javaflow 提供 Ant 任务和 Maven 插件,我不确定 Jasper Reports 最适合什么,但您可以: -- 包括此处描述的 Maven 构建插件。-- 像本一样设置 Ant 。

或者,您可能在调用链上混合了可继续/不可继续的方法。

此外,根据有关Maven Central Jasper Reports 6.7 使用 Tascalate JavaFlow 2.2.1 的信息——通过添加更高版本(2.4.0)来创建版本控制地狱是一个坏主意

于 2019-02-16T14:06:09.610 回答