Я работаю, используя потоки и обработчик / сообщение. Шаги, следующие: Объявите прогресс Диалог
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();
}
Без больше информации трудно точно определить проблему, но первопричина состоит в том, что Вы, скорее всего, скомпилировали класс против различной версии класса, который пропускает метод, чем тот, который Вы используете при выполнении его.
Взгляд на отслеживание стека... Если исключение появляется при вызове метода на объекте в библиотеке, Вы, скорее всего, используете отдельные версии библиотеки при компиляции и выполнении. Удостоверьтесь, что у Вас есть правильная версия оба места.
, Если исключение появляется при назывании метода на объектах инстанцированным классами Вы сделанный, тогда Ваш процесс сборки, кажется, является дефектным. Удостоверьтесь файлы класса, которые Вы на самом деле выполняете, обновляются, когда Вы компилируете.
Если Вы пишете веб-приложение, удостоверяетесь, чтобы у Вас не было конфликтующих версий банки в глобальном каталоге библиотеки Вашего контейнера и также в Вашем приложении. Вы не можете обязательно знать, какая банка используется classloader.
, например,
Это может также быть результатом использования отражения. Если у Вас есть код, который размышляет над классом и извлекает метод по имени (например: с Class.getDeclaredMethod("someMethodName", .....)
) тогда любое время, когда имя метода изменяется, такой как во время осуществления рефакторинг, необходимо будет не забыть обновлять параметры к отражательному методу для соответствия новой сигнатуре метода, или эти getDeclaredMethod
, вызов бросит NoSuchMethodException
.
, Если это - причина, то отслеживание стека должно показать точку, что отражательный метод вызывается, и необходимо будет просто обновить параметры для соответствия фактической сигнатуре метода.
, По моему опыту, это иногда подходит когда поблочное тестирование частные методы/поля и использование TestUtilities
класс для извлечения полей для тестовой проверки. (Обычно с унаследованным кодом, который не был разработан с поблочным тестированием в памяти.)
Это обычно вызывается при использовании системы сборки как Муравей Apache , который только компилирует файлы Java, когда файл Java является более новым, чем файл класса. Если сигнатура метода изменяется, и классы использовали старые вещи версии, может не быть скомпилирован правильно. Обычная фиксация должна сделать, полное восстанавливает (обычно "муравей, чистый" тогда "муравей").
Иногда это может также быть вызвано при компиляции против одной версии библиотеки, но выполнении против различной версии.
Если у Вас есть доступ для изменения параметров JVM, добавляя, что подробный вывод должен позволить Вам видеть, какие классы загружаются из какой БАНКИ.
java -verbose:class <other args>
, Когда Ваша программа запущена, JVM должна вывести к стандарту информацию, такую как:
...
[Загруженный junit.framework. Утверждайте с file:/C:/Program%20Files/junit3.8.2/junit.jar]
...
Обратите внимание, что в случае отражения, Вы добираетесь NoSuchMethodException
, в то время как с неотражающим кодом, Вы добираетесь NoSuchMethodError
. Я склонен идти, смотря в совсем других местах, когда столкнуто с одним по сравнению с другим.
У меня была ваша проблема, и вот как я ее исправил. Следующие шаги - рабочий способ добавления библиотеки. Я сделал первые два шага правильно, но я не сделал последнего, перетащив файл «.jar» прямо из файловой системы в папку «lib» в моем проекте eclipse. Кроме того, мне пришлось удалить предыдущую версию библиотеки как из пути сборки, так и из папки «lib».