Когда мы получаем java.lang.NoSuchMethodError, даже когда у jar / class есть особый метод

Я использую библиотеку IText для облегчения экспорта PDF в апплет. Во время вызова экспорта происходит сбой со следующей ошибкой:

<code>java.lang.NoSuchMethodError: com.lowagie.text.pdf.PdfPTable.completeRow()V
</code>

Я открыл Itext jar / PdfPtable.class в JD Decompiler и подтвердил, что класс имеет completeRow как открытый метод.

Может кто-нибудь объяснить возможные сценарии, когдаjava.lang.NoSuchMethodError бросается, даже если в банке / классе есть?

Вот трассировка стека; может быть не очень полезным, так как большинство звонков зависят от нашего приложения.

Error while exporting to the CSV file - 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(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(Unknown Source)
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(Unknown Source)
java.awt.EventDispatchThread.pumpEvents(Unknown Source)
java.awt.EventDispatchThread.run(Unknown Source)
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(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
spin.Invocation.evaluate(Invocation.java:175)
spin.off.SpinOffEvaluator$1.run(SpinOffEvaluator.java:108)
java.lang.Thread.run(Unknown Source)

 akarnokd26 июн. 2009 г., 15:38
Не могли бы вы переместить текст трассировки стека в ваш вопрос?
 Peter Kofler26 июн. 2009 г., 14:19
Это первый метод, который вы вызываете из iText? Может быть, вставьте оскорбительный кусок кода ...
 akarnokd26 июн. 2009 г., 14:23
Я не вижу этого метода в iText 2.0.4. Какая у вас версия?
 Krishna Kumar26 июн. 2009 г., 15:27
Я использую 2.1.5 версию iText. Этот звонок не первый; на самом деле частичный экспорт в PDF успешен. [ОШИБКА] com.blox.table.action.ExportToCSVAction.actionPerformed (ExportToCSVAction.java:215) - Ошибка при экспорте в файл CSV - java.lang.NoSuchMethodError: com.lowagie.text.pdf.PdfPTable.completeRow (VERT) java.lang.RuntimeException: Ошибка при экспорте в файл CSV - java.lang.NoSuchMethodError: com.lowagie.text.pdf.PdfPTable.completeRow () V

Ответы на вопрос(10)

Решение Вопроса

что один из сторонних jar поставлял старую версию библиотеки iText

что в вашем пути к классу находятся две версии класса PdfPTable. Два используемых вами jar-файла могут содержать разные версии одного и того же класса. Простой способ выяснить это сделать jar -tf для файлов jar в classpath и grep для вашего имени класса. Либо удалите устаревшую версию, либо измените порядок файлов jar в вашем пути к классам.

и я нажал кнопку «Очистить и построить проект», и теперь все отлично работает. Может быть, иногда проблема застревает в предыдущих сборках, и вам нужно восстановить.

и у меня была эта проблема несколько раз. например, когда я изменил параметры метода, он больше не работал! Случайно я понял, что после смены метода, если я щелкну правой кнопкой мыши на проекте и нажму "clean", проблем больше не будет!

Я использую чистую фасоль IDE. Я просто удалил файлы httpclient и core jar (я использую 4.2.1) и заново добавил их. Это, казалось, изменило порядок, и это сработало.

Добавление к "Last Paldin" s & quot; Ответь, что помог мне.

в вашем пути к классу появилась другая версия или что сигнатура этого конкретного метода изменилась после того, как вы скомпилировали свой класс

при более глубоком исследовании заметил, что метод класса Table в стороннем банке, который я добавил, конфликтовал с соответствующим методом таблицы itext-2.0.4 jar. Поэтому я удалил сторонний jar-файл из папки classpath и Libraries и запустил чистую перестройку, и теперь он отлично отрисовывается.

есть другая версия этого класса в вашем classpath до версии, которую вы декомпилировали.
edit: Or Вы обновили пакет, но забыли либо развернуть его в своем пути к классам времени выполнения, либо не обновили путь к классам компиляции, т. е. ваша среда выполнения не синхронизирована с вашей средой компиляции.

public void completeRow() был введен в 2.0.5. у вас должна быть версия до 2.0.5 в вашем classpath времени выполнения. если вы все еще испытываете эту проблему, пожалуйста, изучите путь к классам для запуска процесса. как уже говорилось ранее, вы компилируете версию 2.1.5.

ending class in your classpath before the version that you used for compile (and that you decompiled as said before). This happens often as classpath issues are common, also with experts, esp. in containers, where the order of loaded libraries is unspecified.

So lets say you use iText 1.a to in your IDE and you compile against. Then you deploy your application into some container, where iText 1.b is preinstalled. Preinstalled libraries take precedence and when b < a then you run into this kind of problem.

In your case there is no container, but you could mix up library versions during packaging/deployment or have different classpaths for development and execution.

The jar is not in the classpath at runtime, only at compile time. But then you would get a NoClassDefFoundError when iText is accessed for the first time, which is not the case.

If iText itself would miss a third party library you would also get a NoClassDefFoundError when calling the method that needs the unsatisfied dependency.

 26 июн. 2009 г., 15:25
Вы имеете в виду NoClassDefFoundError, это должна быть ошибка, потому что она не подлежит восстановлению. Вероятно, вы правы
 14 янв. 2013 г., 17:47
Исправил мой, благодаря 1. Хотя я нахожу это удивительным, он не вызывает какую-то ошибку / предупреждение: /
 26 июн. 2009 г., 14:55
ClassNotFoundException должно быть вызвано # 2
 30 июн. 2009 г., 09:09
исправил мой ответ, спасибо
 28 июн. 2009 г., 15:13
Вы правы, я неправильно набрал. ClassNotFoundException срабатывает при попытке отразить на классе, NoClassDefFoundError срабатывает, когда вы пытаетесь выполнить код в скомпилированном классе не в пути к классам во время выполнения

что в вашем пути к классу апплета появятся две версии jar-файла, а загруженная имеет другую подпись, чем та, с которой был скомпилирован ваш код

Ваш ответ на вопрос