Вопрос-ответ

How do I fix a NoSuchMethodError?

Как мне исправить ошибку NoSuchMethodError?

Я получаю NoSuchMethodError ошибку при запуске моей Java-программы. Что не так и как мне это исправить?

Переведено автоматически
Ответ 1

Без дополнительной информации трудно точно определить проблему, но основная причина заключается в том, что вы, скорее всего, скомпилировали класс для другой версии класса, в которой отсутствует метод, чем та, которую вы используете при его запуске.

Посмотрите на трассировку стека ... Если исключение появляется при вызове метода для объекта в библиотеке, вы, скорее всего, используете разные версии библиотеки при компиляции и запуске. Убедитесь, что у вас есть правильная версия в обоих местах.

Если исключение появляется при вызове метода для объектов, созданных классами, созданными вами, то ваш процесс сборки, похоже, неисправен. Убедитесь, что файлы классов, которые вы на самом деле запускаете, обновляются при компиляции.

Ответ 2

У меня была ваша проблема, и вот как я ее исправил. Следующие шаги - рабочий способ добавления библиотеки. Я правильно выполнил первые два шага, но не выполнил последний, перетащив файл ".jar" прямо из файловой системы в папку "lib" в моем проекте eclipse. Кроме того, мне пришлось удалить предыдущую версию библиотеки как из пути сборки, так и из папки "lib".

Шаг 1 - Добавьте файл .jar в путь сборки

введите описание изображения здесь

Шаг 2 - Сопоставление исходных текстов и javadocs (необязательно)

введите описание изображения здесь

Шаг 3 - Фактически перетащите файл .jar в папку "lib" (необязательно)

введите описание изображения здесь

Ответ 3

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

Ответ 4

Если у вас есть доступ к изменению параметров JVM, добавление подробного вывода должно позволить вам увидеть, какие классы загружаются из каких файлов JAR.

java -verbose:class <other args>

При запуске вашей программы JVM должна выводить стандартную информацию, такую как:


...


[Загружен junit.framework.Утвердить из file:/C:/Program%20Files/junit3.8.2/junit.jar]


...


java