我们什么时候得到java.lang.NoSuchMethodError,即使jar /类有特定的方法

Kri*_*mar 10 java applet nosuchmethoderror

我正在使用IText库来促进applet中的pdf导出.在导出调用期间,它失败并出现以下错误:

java.lang.NoSuchMethodError: com.lowagie.text.pdf.PdfPTable.completeRow()V
Run Code Online (Sandbox Code Playgroud)

我在JD Decompiler中打开了Itext jar/PdfPtable.class,并确认该类具有completeRow作为公共方法.

有人可以解释一下java.lang.NoSuchMethodError即使jar/class有它时抛出a的可能场景吗?

这是堆栈跟踪; 可能不是很有用,因为大多数调用都是我们的应用程序特定的.

导出到CSV文件时出错 - java.lang.NoSuchMethodError:com.lowagie.text.pdf.PdfPTable.completeRow()V
com.blox.table.action.ExportToCSVAction.actionPerformed(ExportToCSVAction.java:193)
javax.swing. AbstractButton.fireActionPerformed(Unknown Source)
javax.swing.AbstractButton $ Handler.actionPerformed(Unknown Source)
javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
javax.swing.DefaultButtonModel.setPressed(Unknown Source)
javax.swing.plaf.basic. BasicButtonListener.mouseReleased(未知来源)
java.awt.Component.processMouseEvent(未知来源)
javax.swing.JComponent.processMouseEvent(未知来源)
java.awt.Component.processEvent(未知来源)
java.awt.Container.processEvent(未知来源) )
java.awt.Component.dispatchEventImpl(Unknown Source)
java.awt.Container.dispatchEventImpl(Unknown Source)
java.awt.Component.dispatchEvent(Unknown Source)
java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
java.awt.LightweightDispatcher .processMouseEve nt(未知来源)
java.awt.LightweightDispatcher.dispatchEvent(未知来源)
java.awt.Container.dispatchEventImpl(未知来源)
java.awt.Window.dispatchEventImpl(未知来源)
java.awt.Component.dispatchEvent(未知来源)
java .awt.EventQueue.dispatchEvent(Unknown Source)
java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
java.awt.EventDispatchThread.pumpEvents (未知来源)
java.awt.EventDispatchThread.pumpEvents(未知来源)
java.awt.EventDispatchThread.run(未知来源)
com.lowagie.text.pdf.PdfPTable.completeRow()V
com.blox.table.view.GridTableModel $ PdfExportWriter.writeNewLine(GridTableModel.java:7259)
com.blox.table.view.GridTableModel.buildExportData(GridTableModel.java:3111)
com.blox.table.view.GridTableModel.export(GridTableModel.java:2541)
com.blox. table.view.GridTable.export(GridTable.java:1318)
com.blox.table.ac .ExportToCSVAction.exportToFile(ExportToCSVAction.java:248)
com.blox.table.action.ExportToCSVAction.access $ 1(ExportToCSVAction.java:245)
com.blox.table.action.ExportToCSVAction $ Worker.exportToCSVFile(ExportToCSVAction.java:111 )
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
sun.reflect.NativeMethodAccessorImpl.invoke(来源不明)
sun.reflect.DelegatingMethodAccessorImpl.invoke(来源不明)
java.lang.reflect.Method.invoke(来源不明)
spin.Invocation .evaluate(Invocation.java:175)
spin.off.SpinOffEvaluator $ 1.run(SpinOffEvaluator.java:108)
java.lang.Thread.run(Unknown Source)

Chr*_*Gow 7

可能是您的类路径中出现了不同的版本,或者自编译您的类以来该特定方法的签名已更改


Pet*_*ler 7

  1. 通常这样的问题是因为如果在用于编译的版本之前在您的类路径中存在另一个版本的违规类(并且您已经如前所述进行了反编译).这种情况经常发生,因为类路径问题很常见,特别是专家.在容器中,未指定已加载库的顺序.

    因此,假设您在IDE中使用iText 1.a进行编译.然后将应用程序部署到某个容器中,其中预装了iText 1.b. 预先安装的库优先,当b <a时,您会遇到这种问题.

    在您的情况下,没有容器,但您可以在打包/部署期间混合库版本,或者具有不同的类路径用于开发和执行.

  2. jar在运行时不在类路径中,仅在编译时.但是,当你NoClassDefFoundError第一次访问iText时,你会得到一个,但事实并非如此.

  3. 如果iText本身会错过第三方库,那么NoClassDefFoundError在调用需要不满足依赖关系的方法时,您也会得到一个.


Kri*_*mar 4

我发现其中一个第三方 jar 捆绑了旧版本的 iText 库