Ответ 1
Я узнал, что одна из сторонних банков связывает старую версию библиотеки iText
Я использую библиотеку 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,
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(Неизвестный источник)
Я узнал, что одна из сторонних банков связывает старую версию библиотеки iText
Возможно, что в вашем пути к классам появляется другая версия или что подпись этого конкретного метода изменилась с момента составления вашего класса
Обычно такие проблемы являются причиной, если есть другая версия класса-нарушителя в вашем пути к классу до версии, которую вы использовали для компиляции (и которую вы декомпилировали, как сказано ранее). Это происходит часто, поскольку проблемы с classpath являются общими, также с экспертами, особенно. в контейнерах, где порядок загруженных библиотек не указан.
Итак, скажем, вы используете iText 1.a в своей среде разработки и компилируете ее. Затем вы развертываете свое приложение в каком-то контейнере, где предварительно установлен iText 1.b. Предварительно установленные библиотеки имеют приоритет, и когда b < а затем вы сталкиваетесь с такой проблемой.
В вашем случае нет контейнера, но вы можете смешивать версии библиотеки во время упаковки/развертывания или иметь разные пути к классам для разработки и выполнения.
Ящик не находится в пути к классам во время выполнения, только во время компиляции. Но тогда вы получите NoClassDefFoundError
, когда iText будет доступен в первый раз, что не так.
Если iText сам пропустит стороннюю библиотеку, вы также получите NoClassDefFoundError
при вызове метода, который нуждается в неудовлетворительной зависимости.
Это означает, что две версии класса PdfPTable находятся в вашем пути к классу. Два файла jar, которые вы используете, могут иметь различные версии одного и того же класса. Легкий способ понять, это сделать jar -tf в файлах jar в пути к классам и grep для вашего имени класса. Удалите устаревшую версию или измените порядок файлов jar в своем пути к классу.
Я использую NetBeans IDE, и у меня была эта проблема несколько раз. например, когда я изменил параметры метода, он больше не работает! Случайно, я понял, что после изменения метода, если я нажму правой кнопкой мыши на проекте и нажмите "clean", больше не было проблем!
У меня была та же проблема, и я нажал кнопку "Очистить и создать проект", и теперь все отлично работает. Может быть, иногда проблема застряла в предыдущих сборках, и вам нужно перестроить.
возможно, есть другая версия этого класса в вашем пути к классу перед версией, которую вы декомпилировали.
изменить. Или вы обновили пакет, но забыли либо развернуть его на пути к классу среды выполнения, либо не обновили путь к компиляции, т.е. ваша среда выполнения не синхронизирована с вашей программой compileime env.
public void completeRow()
был введен в 2.0.5. вы должны иметь версию до 2.0.5 в вашем пути к среде выполнения. если вы все еще испытываете эту проблему, изучите путь к классу для запуска процесса. как указано ранее, вы компилируете версию 2.1.5.
Также может быть, что две версии jar появляются в вашем пути к классу апплетов, а тот, который был загружен, имеет другую подпись, отличную от той, которую ваш код был скомпилирован с помощью
Это сработало для меня.
Я использую net beans IDE. Я просто удалил файлы httpclient и core jar (я использую 4.2.1) и повторно добавил их. Казалось, это изменило порядок, и это сработало.
Добавление в ответ "Последний Палдин", который помог мне.
Имел несколько схожую проблему, при более глубоком исследовании заметили, что метод класса таблицы в стороннем банке, который я добавил, противоречил его методу tableext-2.0.4 jar. Поэтому я удалил стороннюю банку из папки классов и библиотек и выполнил чистую перестройку, и теперь она отлично отображается.