代码之家  ›  专栏  ›  技术社区  ›  Krishna Kumar

即使jar/类具有特殊方法,我们什么时候也会得到java.lang.NoSuchMethodError

  •  10
  • Krishna Kumar  · 技术社区  · 17 年前

    我使用IText库在小程序中方便pdf导出。在导出调用过程中,它失败,出现以下错误:

    java.lang.NoSuchMethodError: com.lowagie.text.pdf.PdfPTable.completeRow()V
    

    我在JD反编译器中打开了Itext jar/PdfPtable.class,并确认该类已将completeRow作为公共方法。

    java.lang.NoSuchMethodError 即使jar/class拥有它,也会抛出它吗?

    导出到CSV文件时出错-java.lang.NoSuchMethodError:com.lowagie.text.pdf.PdfPTable.completeRow()V
    com.blox.table.action.ExportToCSVAction.actionPerformed(ExportToCSVAction.java:193)
    javax.swing.AbstractButton.fireActionPerformed(未知源)
    javax.swing.AbstractButton$Handler.actionPerformed(未知源)
    javax.swing.DefaultButtonModel.fireActionPerformed(未知源)
    javax.swing.DefaultButtonModel.setPressed(未知源)
    javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知源代码)
    java.awt.Component.ProcessMouseeEvent(未知源)
    javax.swing.JComponent.ProcessMouseeEvent(未知源)
    java.awt.Component.processEvent(未知源)
    java.awt.Container.processEvent(未知源)
    java.awt.Component.dispatchEventImpl(未知源)
    java.awt.Container.dispatchEventImpl(未知源)
    java.awt.Component.dispatchEvent(未知源)
    java.awt.LightweightDispatcher.RetargetMouseeEvent(未知源)
    java.awt.LightweightDispatcher.ProcessMouseeEvent(未知源)
    java.awt.LightweightDispatcher.dispatchEvent(未知源)
    java.awt.Container.dispatchEventImpl(未知源)

    java.awt.Component.dispatchEvent(未知源)
    java.awt.EventQueue.dispatchEvent(未知源)
    java.awt.EventDispatchThread.pumpOneEventForFilters(未知源)
    java.awt.EventDispatchThread.pumpEventsForFilter(未知源)
    java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源)
    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.GridTable.export(GridTable.java:1318)
    ExportToCSVAction.ExportToCSVAction.exportToFile(ExportToCSVAction.java:248)
    com.blox.table.action.ExportToCSVAction.access$1(ExportToCSVAction.java:245)
    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)
    spinofevaluator$1.run(spinofevaluator.java:108)
    java.lang.Thread.run(未知源)

    10 回复  |  直到 15 年前
        1
  •  7
  •   Chris Gow    17 年前

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

        2
  •  7
  •   Peter Kofler    17 年前
    1. jar在运行时不在类路径中,只是在编译时。但是你会得到一个 NoClassDefFoundError 第一次访问iText时,情况并非如此。

    2. 如果iText本身错过了第三方库,您也会得到一个 NoClassDefFoundError 调用需要未满足依赖项的方法时。

        3
  •  4
  •   Krishna Kumar    17 年前

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

        4
  •  2
  •   The Last Paladin    17 年前

        5
  •  2
  •   mar    15 年前

    我使用的是netbeans IDE,我曾经遇到过这个问题。例如,当我更改一个方法的参数时,它就不再工作了!不经意间,我明白了在更改方法后,如果我右键单击项目并按“clean”,就不会再有问题了!

        6
  •  1
  •   Stefanos Kargas    15 年前

    我也有同样的问题,我点击了Clean and Build Project按钮,现在一切都很好。有时,问题可能来自以前的版本,您需要重新构建。

        7
  •  0
  •   Armadillo    17 年前

    也可能是两个版本的jar出现在applet类路径中,加载的jar与编译代码时使用的jar具有不同的签名

        8
  •  0
  •   akf    17 年前

    在您反编译的版本之前,类路径中可能还有这个类的另一个版本。
    编辑 或 您已经更新了包,但忘记将其部署到运行时类路径,或者尚未更新编译类路径,即运行时环境与compiletime环境不同步。

    public void completeRow() 在2.0.5中引入。运行时类路径中必须有2.0.5之前的版本。如果您仍然遇到此问题,请研究启动进程的类路径。如前所述,您正在使用2.1.5版本进行编译。

        9
  •  0
  •   Sean G    14 年前

    这对我有用。

    我使用netbeanside。我只是删除了httpclient和corejar文件(我使用的是4.2.1)并重新添加了它们。这似乎改变了秩序,而且奏效了。

    加上“Last Paldin”的回答对我有帮助。

        10
  •  0
  •   Juma Wasike    11 年前