【问题标题】:NoSuchMethodError while generating JasperReport's report生成 JasperReport 的报告时出现 NoSuchMethodError
【发布时间】:2016-08-05 09:12:42
【问题描述】:

我正在使用 JasperReports 库生成 PDF 报告。在这份报告中,我有一个 QRCode,这会产生问题。我不得不添加许多库:

jasperreports、itext、itext-pdfa、itext-pdf、commons-beanutils、commons-collections、commons-digester、commons-logging、groovy-all、烧烤、条形码、barcode4j、蜡染动画、蜡染桥、核心, w3c.css.sac, w3c,xmlgraphics-commons, batik-all

我收到一个异常:

java.lang.ClassCastException: org.apache.batik.anim.dom.SVGOMDocument cannot be cast to org.apache.batik.dom.svg.SVGOMDocument
at org.apache.batik.bridge.BridgeContext.setDocument(Unknown Source)
at org.apache.batik.bridge.GVTBuilder.build(Unknown Source)
at net.sf.jasperreports.renderers.AbstractSvgDataToGraphics2DRenderer.ensureSvg(AbstractSvgDataToGraphics2DRenderer.java:166)
at net.sf.jasperreports.renderers.AbstractSvgDataToGraphics2DRenderer.getDimension(AbstractSvgDataToGraphics2DRenderer.java:111)
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.processGraphics2D(JRPdfExporter.java:1793)
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.process(JRPdfExporter.java:1582)
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.access$300(JRPdfExporter.java:1535)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportImage(JRPdfExporter.java:1475)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:1093)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:1056)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:920)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:537)
at reports.JasperReport.generatePdf(JasperReport.java:178)

怎么了?

【问题讨论】:

  • 你错过了两个不同的课程。 anim.dom 不等于 dom.svg
  • @pulpet112 什么是完整的堆栈跟踪?
  • @Jens 我添加了完整的堆栈跟踪
  • @pulpet112 你能贴出图片的表达式(jrxml文件的部分)吗?

标签: java jasper-reports classcastexception


【解决方案1】:

如果这是你自己的代码(你写的),那只是因为你导入了错误的 SVGOMDocument 类(它属于不同的 Java 包)。 您应该能够使用不错的 Java IDE(Eclipse、IntelliJ、NetBeans)快速解决这个问题。

另外,尽可能避免隐式导入,例如:

import org.apache.batik.dom.svg.*;
import org.apache.batik.anim.dom.*;

这可能会降低您的代码稳定性,例如上面添加的行可能会改变您对现有工作代码的引用。 使用显式导入(import org.apache.batik.dom.svg.SVGOMDocument)。

找出您调用的方法的返回类型是什么,然后从正确的 Java 包中导入。在 Eclipse IDE 中,您只需删除包含上述包/类的导入,然后选择 Source > Organize Imports (Ctrl-Shift-O)。

如果您在单个源代码文件中同时拥有这两个类,您可能需要为其中一个类使用完整的类名,例如:

org.apache.batik.dom.svg.SVGOMDocument document = SomeLibrary.getSomething();

【讨论】:

  • 我正在编写自己的代码,但我不直接使用这些类。在我的代码中,我使用 JRPdfExporter 将我的报告导出为 pdf。就是这样 - 这些类被其他一些 Jasper 库调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多