簡體   English   中英

我們什么時候得到java.lang.NoSuchMethodError,即使jar /類有特定的方法

[英]When do we get java.lang.NoSuchMethodError even when the jar/class has the particualar method

我正在使用IText庫來促進applet中的pdf導出。 在導出調用期間,它失敗並出現以下錯誤:

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

我在JD Decompiler中打開了Itext jar / PdfPtable.class,並確認該類具有completeRow作為公共方法。

甚至當jar / class有它時,有人可以解釋拋出java.lang.NoSuchMethodError的可能情況嗎?

這是堆棧跟蹤; 可能不是很有用,因為大多數調用是我們的應用程序特定的。

導出到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(未知來源)

可能是您的類路徑中出現了不同的版本,或者自編譯您的類以來該特定方法的簽名已更改

  1. 通常這樣的問題是因為如果在用於編譯的版本之前在類路徑中存在另一個版本的違規類(並且您已經如前所述進行了反編譯)。 這種情況經常發生,因為類路徑問題很常見,特別是專家。 在容器中,未指定已加載庫的順序。

    因此,假設您在IDE中使用iText 1.a進行編譯。 然后將應用程序部署到某個容器中,其中預裝了iText 1.b. 預先安裝的庫優先,當b <a時,您會遇到這種問題。

    在您的情況下,沒有容器,但您可以在打包/部署期間混合庫版本,或者具有不同的類路徑用於開發和執行。

  2. jar在運行時不在類路徑中,僅在編譯時。 但是,當第一次訪問iText時,你會得到一個NoClassDefFoundError ,但事實並非如此。

  3. 如果iText本身會錯過第三方庫,那么在調用需要不滿足的依賴項的方法時,您也會得到NoClassDefFoundError

我發現其中一個第三方jar正在捆綁舊版iText庫

這意味着類PdfPTable的兩個版本都在您的類路徑中。 您正在使用的兩個jar文件可能已打包同一類的不同版本。 簡單的方法是在類路徑中對jar文件執行jar -tf,並為類名執行grep。 刪除過時版本或更改類路徑中jar文件的順序。

我正在使用netbeans IDE,我有時會遇到這個問題。 例如,當我更改方法的參數時,它不再起作用了! 無意中,我了解到在更改方法后,如果我右鍵單擊項目並按“清理”,則不再有任何問題!

我有同樣的問題,我點擊了清潔和構建項目按鈕,現在一切都很好。 也許有時問題會從之前的版本中卡住而你需要重建。

也許在你的反編譯版本之前,你的類路徑中還有這個類的另一個版本。
編輯或者您已經更新了包,但是忘記將它部署到運行時類路徑,或者您還沒有更新編譯類路徑,即您的運行時環境與您的編譯時環境不同步。

public void completeRow()在2.0.5中引入。 您必須在運行時類路徑中具有2.0.5之前的版本。 如果您仍然遇到此問題,請研究該過程啟動的類路徑。 如前所述,您正在使用2.1.5版本進行編譯。

它也可能是你的applet類路徑中出現了兩個版本的jar,而且加載的那個版本的簽名與你的代碼編譯時的簽名不同

這對我有用。

我使用net beans IDE。 我只是刪除了httpclient和核心jar文件(我正在使用4.2.1)並重新添加它們。 這似乎改變了秩序並且有效。

添加到“Last Paldin”的答案幫助了我。

有一個類似的問題,在更深入的調查中注意到我添加的第三方jar中的Table類方法與itext-2.0.4 jar的相應表方法沖突。 所以我從classpath和Libraries文件夾中刪除了第三方jar並運行一個干凈的重建,現在它完美呈現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM