Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jasper报告生成时中断(无编辑)_Java_Jasper Reports - Fatal编程技术网

Java Jasper报告生成时中断(无编辑)

Java Jasper报告生成时中断(无编辑),java,jasper-reports,Java,Jasper Reports,我从一个离开公司的开发者那里继承了一个项目。该项目使用java(对我来说是新的)并使用jasper reports(对我来说是新的)生成PDF。我需要更新其中一个报告以删除一些文本。如果我从源代码管理中获取代码并运行它,它就可以正常工作。但是,如果我打开一个jrxml文件并构建它,而不做任何更改,那么尝试再次运行该报告,它就会崩溃。我得到的错误是: java.lang.NullPointerException java.lang.Class.isAssignableFrom(本机方法) net.

我从一个离开公司的开发者那里继承了一个项目。该项目使用java(对我来说是新的)并使用jasper reports(对我来说是新的)生成PDF。我需要更新其中一个报告以删除一些文本。如果我从源代码管理中获取代码并运行它,它就可以正常工作。但是,如果我打开一个jrxml文件并构建它,而不做任何更改,那么尝试再次运行该报告,它就会崩溃。我得到的错误是:

java.lang.NullPointerException java.lang.Class.isAssignableFrom(本机方法) net.sf.jasperreports.engine.fill.JRFillTextField.getFormat(JRFillTextField.java:706) net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:394) net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:368) net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:258) net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:499) net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2036) net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:760) net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:270) net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:128) net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946) net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845) net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:609) net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59) net.sf.jasperreports.engine.fill.JRThreadSubreportRunner.run(JRThreadSubreportRunner.java:205) java.lang.Thread.run(未知源)

我一辈子都搞不懂这个错误意味着什么或者如何调试它。正如我上面所说,我对实际报告没有做任何修改。此时我所做的只是在iReport中打开jrxml文件并构建它。如果我将jasper文件恢复为签入的版本,那么报告将再次开始工作。这个报告有一些子报告,我构建的哪个文件会破坏整个报告似乎并不重要

我不知道这是否有帮助,但我调试了代码,它即将消失的一行是:

bytes = JasperRunManager.runReportToPdf(...)
编辑:我的jasper report JAR和我的iReport版本是不同的版本。我为我正在使用的iRpeort版本(5.1.0)添加了JAR,现在出现了一个新错误。进步!错误是:

无法将net.sf.jasperreports.engine.base.JRBaseTextField实例分配给net.sf.jasperreports.engine.base.jrbaseParagraphContainer实例中类型为net.sf.jasperreports.engine.jrbaseParagraphContainer的字段net.sf.jasperreports.base.jrbaseParagraphContainer



谢谢评论人的帮助。我刚刚获得了iReportV4.0.1,以匹配我拥有的Jar。现在我可以编辑文件了。不幸的是,我没有时间从头开始学习所有这些内容,所以我现在只对旧版本感到厌烦。

库中的一些功能从4改为5,需要进行一些调整才能使报告正常工作。一个主要的变化是条形码、iReport如何包含条形码以及它们支持的库。因为您不熟悉java或JasperReports,所以我认为使用旧版本的iReport是正确的选择


将来,要知道可以用jrxml文件而不是编译的jasper文件来打包JAR,并让库动态编译报告。这使得维护不再是我所发现的噩梦。

a
NullPointerException
意味着某个对象引用指向
null
,而该代码正试图调用该对象引用上的方法或访问该对象引用上的字段。确保
(…)
中的所有内容都已初始化,即不为null。所有参数均为null,但有一个参数是包含null项的哈希映射。如果我使用checked-in.jasper文件,这会使我相信调用代码是有效的,但可能我错了。实际问题(从我所知道的)是,您有一个未设置格式的文本字段(在jrxml中)和
JRFillTextField.getFormat
返回
null
。然后一些内部方法调用了
Class.isAssignableFrom
,该格式会抛出
NullPointerException
。我在网上查看了一下,注意到一条评论,我的jasperreports版本和ireport版本需要相同。我的jasperreports jar是4.0.1,iReport是5.1.0。这可能是问题所在吗?现在尝试在项目中获取新jar并进行测试。这不会有什么坏处,但是如果更高版本的jasperreports包含相同的代码,您将得到相同的异常。