例外情况;java.lang.NoSuchMethodError:org.objectweb.asm.ClassWriter“;关于查看Jasper报告

例外情况;java.lang.NoSuchMethodError:org.objectweb.asm.ClassWriter“;关于查看Jasper报告,java,swing,jasper-reports,Java,Swing,Jasper Reports,我正在使用Jasper报告,并在我的类路径中使用以下库 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

我正在使用Jasper报告,并在我的类路径中使用以下库

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)

我做错了什么?如何修复或进一步调试此问题?

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

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

当我删除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.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:967)org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:546)现在我在类路径中使用asm-3.1.jar。这就是它的有趣之处。您只需要尝试使用asm的不同版本的东西,看看是否可以找到有效的东西。我会先尝试Groovy。您使用的是一个非常旧的版本。看看您是否可以升级它。@Prog\u Anila:您可以通过单击接受这个答案左边是ing。@Ryan请把我的问题投上一票,因为我也接受了你的答案。NoSuchMethodError几乎总是表示jar文件不匹配——有些东西是针对一个版本编译的,但在另一个版本上运行。
 JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param, jdbcConnection);
 JasperViewer.viewReport(jasperPrint);