Когда мы получаем java.lang.NoSuchMethodError, даже когда у jar / class есть особый метод - PullRequest
10 голосов
/ 26 июня 2009

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

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

Я открыл Itext jar / PdfPtable.class в JD Decompiler и подтвердил, что класс имеет 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.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 * 1 039 * 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 (неизвестный источник)

Ответы [ 10 ]

7 голосов
/ 26 июня 2009
  1. Обычно такие проблемы возникают, если в вашем пути к классам есть другая версия класса-нарушителя перед версией, которую вы использовали для компиляции (и которую вы декомпилировали, как сказано выше). Это часто случается, так как проблемы с classpath распространены, в том числе у экспертов, особенно. в контейнерах, где порядок загружаемых библиотек не указан.

    Допустим, вы используете iText 1.a в своей среде IDE и выполняете компиляцию. Затем вы развертываете свое приложение в некотором контейнере, где предустановлен iText 1.b. Предварительно установленные библиотеки имеют приоритет, и когда b

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

  2. Jar не находится в пути к классам во время выполнения, только во время компиляции. Но тогда вы получите NoClassDefFoundError при первом доступе к iText, а это не так.

  3. Если iText сам пропустит стороннюю библиотеку, вы также получите NoClassDefFoundError при вызове метода, который нуждается в неудовлетворенной зависимости.

7 голосов
/ 26 июня 2009

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

4 голосов
/ 29 июня 2009

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

2 голосов
/ 24 ноября 2010

Я использую NetBeans IDE, и у меня была эта проблема несколько раз. например, когда я изменил параметры метода, он больше не работал! Случайно я понял, что после смены метода, если я щелкну правой кнопкой мыши на проекте и нажму «очистить», проблем больше не будет!

2 голосов
/ 28 июня 2009

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

1 голос
/ 04 июля 2011

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

0 голосов
/ 05 ноября 2014

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

0 голосов
/ 26 сентября 2012

Это сработало для меня.

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

Добавление к ответу "Последнего Палдина", которое мне помогло.

0 голосов
/ 26 июня 2009

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

0 голосов
/ 26 июня 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...