10

IText ライブラリを使用して、アプレットでの PDF エクスポートを容易にしています。エクスポートの呼び出し中に、次のエラーで失敗します。

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

JD Decompiler で Itext jar/PdfPtable.class を開き、クラスが public メソッドとして completeRow を持っていることを確認しました。

java.lang.NoSuchMethodErrorjar/class に a がある場合でも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(不明なソース)
java.awt.Component.processMouseEvent(不明なソース)
javax.swing.JComponent.processMouseEvent(不明なソース)
java.awt.Component.processEvent(不明なソース)
java.awt.Container.processEvent(不明なソース)
java.awt.Component.dispatchEventImpl(不明なソース)
java.awt.Container.dispatchEventImpl(不明なソース)
java.awt.Component.dispatchEvent(不明なソース)
java.awt.LightweightDispatcher. retargetMouseEvent(不明なソース)
java.awt.LightweightDispatcher.processMouseEvent(不明なソース)
java.awt.LightweightDispatcher.dispatchEvent(不明なソース)
java.awt.Container.dispatchEventImpl(不明なソース)
java.awt.Window.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. 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(ネイティブ メソッド)
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(不明なソース)

4

10 に答える 10

7

クラスパスに別のバージョンが表示されているか、クラスをコンパイルしてからその特定のメソッドのシグネチャが変更されている可能性があります

于 2009-06-26T12:12:52.307 に答える
7
  1. 通常、このような問題は、コンパイルに使用したバージョン(および前述のように逆コンパイルしたバージョン)の前に、クラスパスに問題のあるクラスの別のバージョンがある場合に発生します。これは、クラスパスの問題が一般的であるため、特に専門家にもよく発生します。ロードされたライブラリの順序が指定されていないコンテナ内。

    つまり、IDEでiText 1.a toを使用し、に対してコンパイルするとします。次に、iText1.bがプリインストールされているコンテナにアプリケーションをデプロイします。プレインストールされたライブラリが優先され、b <aの場合、この種の問題が発生します。

    あなたの場合、コンテナはありませんが、パッケージ化/デプロイ中にライブラリのバージョンを混同したり、開発と実行のために異なるクラスパスを使用したりできます。

  2. jarは実行時にクラスパスに存在せず、コンパイル時にのみ存在します。しかし、NoClassDefFoundErroriTextに初めてアクセスすると、が表示されますが、そうではありません。

  3. iText自体がサードパーティのライブラリを見逃す場合NoClassDefFoundErrorは、満たされていない依存関係を必要とするメソッドを呼び出すときにも取得します。

于 2009-06-26T12:18:41.623 に答える
4

サードパーティのjarファイルの1つが古いバージョンのiTextライブラリをバンドルしていることがわかりました

于 2009-06-29T09:08:12.263 に答える
2

NetBeans IDEを使用していますが、この問題が発生することがありました。たとえば、メソッドのパラメーターを変更すると、機能しなくなりました。ちなみに、方法を変更した後、プロジェクトを右クリックして「クリーン」を押すと、もう問題ないことがわかりました!

于 2010-11-24T16:54:40.860 に答える
2

これは、クラス PdfPTable の 2 つのバージョンがクラス パスにあることを意味します。使用している 2 つの jar ファイルが、同じクラスの異なるバージョンをパッケージ化した可能性があります。把握する簡単な方法は、クラスパス内の jar ファイルに対して jar -tf を実行し、クラス名に対して grep を実行することです。古いバージョンを削除するか、クラスパス内の jar ファイルの順序を変更してください。

于 2009-06-28T05:46:39.537 に答える
1

私は同じ問題を抱えていて、[Clean and Build Project] ボタンをクリックすると、すべてがうまく機能するようになりました。以前のビルドで問題が発生し、再構築する必要がある場合があります。

于 2011-07-04T07:49:59.327 に答える
0

逆コンパイルしたバージョンの前に、クラスパスにこのクラスの別のバージョンが存在する可能性があります。
edit :または、パッケージを更新したが、ランタイム クラスパスにデプロイするのを忘れているか、コンパイル クラスパスを更新していません。つまり、ランタイム環境がコンパイル時の環境と同期していません。

public void completeRow()2.0.5 で導入されました。ランタイム クラスパスに 2.0.5 より前のバージョンが必要です。それでもこの問題が発生する場合は、プロセスの起動のクラスパスを調べてください。前に述べたように、2.1.5 バージョンでコンパイルしています。

于 2009-06-26T12:10:19.410 に答える
0

これは私にとってはうまくいきました。

私はネットビーンズIDEを使用しています。httpclient とコア jar ファイル (私は 4.2.1 を使用しています) を削除し、再度追加しました。それは順序を変えるようで、うまくいきました。

私を助けた「最後のパルディンの」回答に追加します。

于 2012-09-26T17:33:42.620 に答える
0

また、2 つのバージョンの jar がアプレットのクラスパスに表示され、ロードされたバージョンの署名が、コードのコンパイルに使用された署名とは異なる可能性もあります。

于 2009-06-26T13:04:52.687 に答える