Что может вызвать java.lang.reflect.InvocationTargetException?

Ну, я пытался понять и прочитать, что может вызвать это, но я просто не могу это понять:

У меня это где-то в моем коде:

try{ .. m.invoke(testObject); .. } catch(AssertionError e){ ... } catch(Exception e){ .. } 

Дело в том, что когда он пытается вызвать какой-либо метод, он выдает InvocationTargetException вместо некоторого другого ожидаемого исключения (в частности, ArrayIndexOutOfBoundsException ). Поскольку я действительно знаю, какой метод вызывается, я пошел прямо к этому методу кода и добавил блок try-catch для строки, которая предположила бы выбросить ArrayIndexOutOfBoundsException и она действительно выбросила ArrayIndexOutOfBoundsException как ожидалось. Тем не менее, когда он поднимается, он каким-то образом изменяется на InvocationTargetException и в коде выше catch(Exception e) e является InvocationTargetException а не ArrayIndexOutOfBoundsException как ожидалось.

Что может вызвать такое поведение или как я могу это проверить?

13 Solutions collect form web for “Что может вызвать java.lang.reflect.InvocationTargetException?”

Вы добавили дополнительный уровень абстракции, вызвав метод с reflectionм. Отражающий слой обертывает любое исключение в InvocationTargetException , которое позволяет вам различать исключение, фактически вызванное сбоем в вызове отражения (возможно, например, ваш список аргументов недействителен) и сбой в вызванном методе.

Просто распакуйте причину в InvocationTargetException и вы перейдете к исходному.

Исключение выдается, если

InvocationTargetException – если базовый метод генерирует исключение.

Поэтому, если метод, который был вызван API-интерфейсом отражения, генерирует исключение (например, исключение среды выполнения), API-интерфейс отражения превратит исключение в исключение InvocationTargetException .

Используйте метод getCause() для исключения InvocationTargetException для получения исходного исключения.

Из Javadoc of Method.invoke ()

Выбрасывает: InvocationTargetException – если базовый метод выдает исключение.

Это исключение выбрасывается, если метод вызвал исключение.

Это будет печатать точную строку кода в конкретном методе, который при вызове вызывает исключение:

 try { // try code .. m.invoke(testObject); .. } catch (InvocationTargetException e) { // Answer: e.getCause().printStackTrace(); } catch (Exception e) { // generic exception handling e.printStackTrace(); } 

Это InvocationTargetException , вероятно, завершает ваше ArrayIndexOutOfBoundsException . При использовании рефлексии нельзя сказать, что может использовать этот метод, поэтому вместо того, чтобы использовать метод throws Exception , все исключения захватываются и завершаются в InvocationTargetException .

Это описывает что-то вроде:

InvocationTargetException – проверенное исключение, которое обертывает исключение, созданное вызываемым методом или конструктором. Начиная с версии 1.4, это исключение было дооснащено, чтобы соответствовать механизму исключения исключений общего назначения. «Целевое исключение», которое предоставляется во время построения и доступно через метод getTargetException (), теперь известно как причина и может быть доступно через метод Throwable.getCause (), а также вышеупомянутый «унаследованный метод».

Вы можете сравнить с исходным classом исключения с использованием метода getCause () следующим образом:

 try{ ... } catch(Exception e){ if(e.getCause().getClass().equals(AssertionError.class)){ // handle your exception 1 } else { // handle the rest of the world exception } } 

У меня была ошибка java.lang.reflect.InvocationTargetException из оператора, вызывающего объект logger во внешнем class внутри блока try / catch в моем class .

Выполнив код в отладчике Eclipse и наведя указатель мыши на инструкцию logger, я увидел, что object logger был null (некоторые внешние константы должны были быть созданы в самом начале моего class ).

Это исключение выдается, если базовый метод (метод, называемый использованием Reflection) выдает исключение.

Поэтому, если метод, который был вызван API-интерфейсом отражения, генерирует исключение (например, исключение во время выполнения), API-интерфейс отражения превратит исключение в исключение InvocationTargetException.

Я столкнулся с той же проблемой. Я использовал e.getCause (). GetCause (), тогда я обнаружил, что это из-за неправильных параметров, которые я проходил. Было исключение nullPointerException при получении значения одного из параметров. Надеюсь, что это поможет вам.

  1. Список всех файлов jar из режима Навигатора Eclipse
  2. Убедитесь, что все файлы jar находятся в двоичном режиме

Ошибка исчезла после того, как я сделал Clean-> Run xDoclet-> Run xPackaging.

В моей рабочей области, в ecllipse.

  • Установка свойства путем отражения со строковым значением
  • Почему в C # нет оператора `fieldof` или` methodof`?
  • Вывод типа отражения на Java 8 Lambdas
  • C # общий список как получить тип T?
  • Получить общий тип classа во время выполнения
  • получение типа T из IEnumerable
  • Как определить, реализует ли тип определенного типа общего типа
  • Изменение частного статического конечного поля с использованием отражения Java
  • Как я могу получить все classы в пространстве имен?
  • Создание classа из строки и создание экземпляра в Scala 2.10
  • Проверьте, является ли class производным от общего classа
  • Interesting Posts

    Почему в 64-битном виртуальном адресе есть 4 бита (48 бит) по сравнению с физическим адресом (длиной 52 бит)?

    Выделите пользовательский элемент списка, когда он длительный

    Mocking $ modal в модульных тестах AngularJS

    Не распознан жесткий диск, пароль администратора супервизора

    System.Web.HttpContext.Current.User.Identity.Name Vs System.Environment.UserName в ASP.NET

    В чем разница между 127.0.0.1 и 0.0.0.0?

    Как я могу вычислить декартово произведение итеративно?

    ValidateRequest = “false” не работает в Asp.Net 4

    в блоке «using» есть SqlConnection, закрытое по возврату или исключению?

    Ошибка5: доступ запрещен при перезапуске службы журнала событий

    Как нарисовать округленный прямоугольник в Android UI?

    iOS: конвертировать UTC NSDate в локальный часовой пояс

    Обоснование равенства / неравенства

    Прочтите всю историю команд терминала в OS X

    Сочетание несовместимости массивов numpy между Python 2 и 3

    Давайте будем гением компьютера.