【问题标题】:Exception "java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter" on Viewing Jasper Report查看 Jasper 报告时出现异常“java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter”
【发布时间】:2012-04-26 02:13:25
【问题描述】:

我正在使用 Jasper Reports 并在我的类路径中使用以下库

jasperreports-4.5.1.jar
common-digester3-3.2.jar
common-digester2.1.jar
castor-1.2.jar
commons-beanutils-1.8..0.jar
commons-collections-2.1.1.jar
commons-logging-1.1.1.jar
groovy-1.2.6.jar
asm-2.2.3.jar
asm-3.1.jar
asm-all-3.1.jar
antlr-3.3.1.1.jar
jtds-1.2.5.jar

我遇到了以下异常

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
at org.codehaus.groovy.control.CompilationUnit.createClassVisitor(CompilationUnit.java:791)
at org.codehaus.groovy.control.CompilationUnit$14.call(CompilationUnit.java:755)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:967)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:546)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:524)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:501)
at net.sf.jasperreports.compilers.JRGroovyCompiler.compileUnits(JRGroovyCompiler.java:96)
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:188)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:212)
at Utilities.ReportDriver.runReport(ReportDriver.java:81)
at jewelleryerpapplication.GUI.MainReports.jbtnViewReportActionPerformed(MainReports.java:544)
at jewelleryerpapplication.GUI.MainReports.access$100(MainReports.java:18)
at jewelleryerpapplication.GUI.MainReports$2.actionPerformed(MainReports.java:210)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)

关于执行以下代码:

 JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param, jdbcConnection);
 JasperViewer.viewReport(jasperPrint);

我做错了什么?我该如何解决这个问题或进一步调试它?

【问题讨论】:

  • NoSuchMethodError 几乎总是表明 jar 文件不匹配——某些东西是针对一个版本编译的,但在另一个版本上运行。

标签: java swing jasper-reports


【解决方案1】:

请注意,您列出了两个不同版本的 ASM。这是该库的一个非常常见的问题,因为许多其他库在后台使用它,并且因为 Java 的类路径机制不允许使用同一库的不同版本。 (这种情况在 Groovy 和 Hibernate 之间一直发生。)因此,当您设置类路径时,一个库需要 2.2.3 版本,一个需要 3.1。但是,在查找类时,类路径中的第一个获胜。在您的情况下,Groovy 正在尝试调用 ClassWriter 上的构造函数,该构造函数在任何版本中都不存在(2.2.3,如果您按实际的类路径顺序列出它们)。当您遇到这种需要不同版本的情况时,您所能做的就是选择一个版本并交叉手指。试试看它是否适用于您需要的任何地方。如果您使用较新的 ASM 版本 (3.1),很可能一切都会好起来的。反正这是我的经验。如果您找不到适用于所有情况的版本,您可能会遇到大问题。

【讨论】:

  • 当我删除 asm 2.2.3 和 asm-all-3.1 时,我在线程 "AWT-EventQueue-0" java.lang.AbstractMethodError: org.codehaus.groovy.control.CompilationUnit 中得到以下异常异常$ClassgenCallback.call(Lorg/objectweb/asm/ClassVisitor;Lorg/codehaus/groovy/ast/ClassNode;)V 在 org.codehaus.groovy.control.CompilationUnit$14.call(CompilationUnit.java:776) 在 org.codehaus。 org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:546) 上的 groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:967)
  • 现在我在类路径中使用 asm-3.1.jar。
  • 这就是有趣的地方。您只需要尝试使用 ASM 的不同版本的东西,看看是否能找到有效的东西。我会先尝试 Groovy。您使用的是非常旧的版本。看看你能不能升级它。
  • @Prog_Anila:您可以通过点击左侧的empty check mark 来接受这个答案。
  • @Ryan 请给我的问题投票,因为我也接受了你的回答。
【解决方案2】:

我收到了类似的错误消息。它不依赖于 ASM,而是依赖于使用的 groovy 库 groovy-x.x.x.jar。当心 - 您必须使用 groovy-all-x.x.x.jar 才能完成这项工作。

【讨论】:

    猜你喜欢
    • 2012-10-07
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多