Что может вызвать Java.ленг.отражать.InvocationTargetException?
Ну, я пытался понять и прочитать, что может вызвать это, но я просто не могу этого понять:
у меня это где-то в мой код:
try{
..
m.invoke(testObject);
..
} catch(AssertionError e){
...
} catch(Exception e){
..
}
дело в том, что, когда он пытается вызвать какой-то метод бросает
InvocationTargetException вместо некоторых других ожидаемых исключений (в частности ArrayIndexOutOfBoundsException).
Поскольку я действительно знаю, какой метод вызывается, я пошел прямо к этому коду метода и добавил блок try-catch для строки, которая предполагает бросить ArrayIndexOutOfBoundsException и он действительно бросил ArrayIndexOutOfBoundsException как ожидаемый. Еще при подъеме он
как-то меняется на InvocationTargetException и в коде выше catch(Exception e)
е InvocationTargetException, а не ArrayIndexOutOfBoundsException
как и ожидалось.
что может вызвать такое поведение или как я могу проверить такую вещь?
13 ответов:
вы добавили дополнительный уровень абстракции, вызвав метод с отражением. Слой отражения обертывает любое исключение в
InvocationTargetException, что позволяет определить разницу между исключением на самом деле вызвано сбоем в вызове отражения (возможно, ваш список аргументов был недействительным, например) и сбоем в вызываемом методе.просто разверните причину внутри
InvocationTargetExceptionи вы доберетесь до оригинала.
исключение, если
InvocationTargetException-если базовый метод создает исключение.
поэтому, если метод, который был вызван с помощью API отражения, вызывает исключение (например, исключение времени выполнения), API отражения обернет исключение в
InvocationTargetException.
из Javadoc метода.invoke ()
Throws: 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() теперь известен как причина, и может быть доступ осуществляется через Метательный.метод getCause (), а также вышеупомянутый " унаследованный метод."
вы можете сравнить с исходным классом исключений, используя метод 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 я увидел logger
objectбылnull(некоторые внешние константы должны быть созданы в самом верху моегоclass).
это исключение создается, если базовый метод(метод, вызываемый с помощью отражения) создает исключение.
поэтому, если метод, который был вызван API отражения, вызывает исключение (например, исключение времени выполнения), API отражения обернет исключение в исключение InvocationTargetException.
Я столкнулся с той же проблемой. Я использовал e. getCause ().getCause () затем я обнаружил, что это было из-за неправильных параметров, которые я передавал. При извлечении значения одного из параметров возникло исключение nullPointerException. Надеюсь, это поможет вам.
- Список всех файлов jar из режима Eclipse Navigator
- убедитесь, что все файлы jar находятся в двоичном режиме
ошибка исчезла после того как я сделал Очистить- > запустить xDoclet - >запустить xPackaging.
в моем рабочем пространстве, в ecllipse.
Comments