10

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

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

我在 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(未知来源)
javax.swing.AbstractButton$Handler.actionPerformed(未知来源)
javax.swing.DefaultButtonModel.fireActionPerformed(未知来源)
javax.swing.DefaultButtonModel.setPressed(未知来源)
javax.swing.plaf.basic。 BasicButtonListener.mouseReleased(Unknown Source)
java.awt.Component.processMouseEvent(Unknown Source)
javax.swing.JComponent.processMouseEvent(Unknown Source)
java.awt.Component.processEvent(Unknown Source)
java.awt.Container.processEvent(Unknown Source)
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.processMouseEvent(Unknown Source)
java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
java.awt.Container.dispatchEventImpl(Unknown Source)
java.awt.Window.dispatchEventImpl(Unknown Source)
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。 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.action.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
(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke
(Unknown Source)
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(未知来源)

4

10 回答 10

7

可能是您的类路径中出现了不同的版本,或者该特定方法的签名在您编译类后发生了变化

于 2009-06-26T12:12:52.307 回答
7
  1. 通常,如果类路径中有另一个版本的违规类在您用于编译的版本之前(并且您如前所述反编译),则通常会导致此类问题。这种情况经常发生,因为类路径问题很常见,专家尤其如此。在容器中,未指定加载库的顺序。

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

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

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

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

于 2009-06-26T12:18:41.623 回答
4

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

于 2009-06-29T09:08:12.263 回答
2

这意味着类 PdfPTable 的两个版本在您的类路径中。您正在使用的两个 jar 文件可能打包了同一类的不同版本。弄清楚的简单方法是对类路径中的 jar 文件执行 jar -tf,然后使用 grep 获取您的类名。删除旧版本或更改类路径中 jar 文件的顺序。

于 2009-06-28T05:46:39.537 回答
2

我正在使用 netbeans IDE,有时我遇到了这个问题。例如,当我更改方法的参数时,它不再起作用了!无意间明白了,改了方法后,如果我在项目上右键,按“clean”,就没有问题了!

于 2010-11-24T16:54:40.860 回答
1

我遇到了同样的问题,我点击了 Clean and Build Project 按钮,现在一切正常。也许有时问题是从以前的构建中卡住的,您需要重新构建。

于 2011-07-04T07:49:59.327 回答
0

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

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

于 2009-06-26T12:10:19.410 回答
0

也可能是您的小程序类路径中出现了两个版本的 jar,而加载的版本与编译代码时使用的签名不同

于 2009-06-26T13:04:52.687 回答
0

这对我有用。

我使用网豆 IDE。我只是删除了 httpclient 和核心 jar 文件(我使用的是 4.2.1)并重新添加了它们。这似乎改变了顺序,并且奏效了。

添加对我有帮助的“最后的帕尔丁”答案。

于 2012-09-26T17:33:42.620 回答
0

有一个类似的问题,在更深入的调查中发现我添加的第 3 方 jar 中的 Table 类方法与 itext-2.0.4 jar 的相应 table 方法冲突。所以我从类路径和库文件夹中删除了第 3 方 jar 并运行了一个干净的重建,现在它完美呈现。

于 2014-11-05T09:41:20.263 回答