Как я фиксирую NoSuchMethodError?

Я работаю, используя потоки и обработчик / сообщение. Шаги, следующие: Объявите прогресс Диалог

ProgressDialog loadingdialog;

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

   private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        loadingdialog.dismiss();

    }
    };

Скомпонуйте ваши данные об исполнении:

 public void startUpload(String filepath) {
    loadingdialog = ProgressDialog.show(MainActivity.this, "Uploading", "Uploading Please Wait", true);
    final String _path = filepath;
    new Thread() {
        public void run() {
            try {
                UploadFile(_path, getHostName(), getPortNo());
                handler.sendEmptyMessage(0);

            } catch (Exception e) {
                Log.e("threadmessage", e.getMessage());
            }
        }
    }.start();
}
162
задан Charles Menguy 26 April 2012 в 00:34
поделиться

7 ответов

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

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

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

217
ответ дан Vetle 23 November 2019 в 21:20
поделиться

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

, например,

  • кот/распространенный/lib
  • mywebapp/WEB-INF/lib
3
ответ дан Cheekysoft 23 November 2019 в 21:20
поделиться

Это может также быть результатом использования отражения. Если у Вас есть код, который размышляет над классом и извлекает метод по имени (например: с Class.getDeclaredMethod("someMethodName", .....)) тогда любое время, когда имя метода изменяется, такой как во время осуществления рефакторинг, необходимо будет не забыть обновлять параметры к отражательному методу для соответствия новой сигнатуре метода, или эти getDeclaredMethod, вызов бросит NoSuchMethodException.

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

, По моему опыту, это иногда подходит когда поблочное тестирование частные методы/поля и использование TestUtilities класс для извлечения полей для тестовой проверки. (Обычно с унаследованным кодом, который не был разработан с поблочным тестированием в памяти.)

4
ответ дан rcreswick 23 November 2019 в 21:20
поделиться

Это обычно вызывается при использовании системы сборки как Муравей Apache , который только компилирует файлы Java, когда файл Java является более новым, чем файл класса. Если сигнатура метода изменяется, и классы использовали старые вещи версии, может не быть скомпилирован правильно. Обычная фиксация должна сделать, полное восстанавливает (обычно "муравей, чистый" тогда "муравей").

Иногда это может также быть вызвано при компиляции против одной версии библиотеки, но выполнении против различной версии.

11
ответ дан John Meagher 23 November 2019 в 21:20
поделиться

Если у Вас есть доступ для изменения параметров JVM, добавляя, что подробный вывод должен позволить Вам видеть, какие классы загружаются из какой БАНКИ.

java -verbose:class <other args>

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

...

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

...

45
ответ дан matt b 23 November 2019 в 21:20
поделиться

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

69
ответ дан erickson 23 November 2019 в 21:20
поделиться

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

Шаг 1 - Добавьте .jar для создания пути

enter image description here

Шаг 2 - Свяжите источники и javadocs (необязательно)

enter image description here

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

enter image description here

107
ответ дан 23 November 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: