logo

InvocaçãoTargetException

O InvocaçãoTargetException é uma exceção verificada que contém uma exceção lançada por um método ou construtor invocado. Desde o JDK 1.4, esta exceção foi adaptada para estar em conformidade com o mecanismo de encadeamento de exceções de uso geral. A 'exceção de destino' fornecida no momento da construção e acessada por meio do método getTargetException() agora é conhecida como a causa e pode ser acessada por meio do método Throwable.getCause(), bem como pelo 'método legado'.

Resumindo, quando invocamos uma classe usando Method.invoke(), ela lança uma exceção; está envolto pelo java.lang.reflect.InvocationTargetException aula.

Causa de InvokationTargetException

A InvokationTargetException ocorre principalmente ao trabalhar com o Java API de reflexão e tente invocar um método ou construtor na camada de reflexão que lança uma exceção subjacente.

A camada de reflexão contém a exceção real lançada pelos métodos padrão.

Como resolver java.lang.reflect.InvocationTargetException

A InvocationTargetException é causada pelo método invocado, que lança uma exceção. A exceção subjacente pode ser encontrada usando o método getCause(). Portanto, é necessário encontrar a exceção real e resolvê-la para resolver a InvocationTargetException.

InvocaçãoTargetException

Considere o exemplo abaixo, que gera intencionalmente uma exceção (dividir por zero) no método Demo(), que é invocado usando Method.invoke(). Assim, a saída lançará AirthmeticException (DividebyZero) e InvokationTargetException.

TestInvokationException.java:

 import java.lang.reflect.Method; public class TestInvocationException { public static void main(String[] args) { TargetInvocation ti = new TargetInvocation(); // Accessing all the methods of TargetInvocationClass: Method[] m = TargetInvocation.class.getMethods(); try { // Invoking the first method of the TargetInvocatioClass: m[0].invoke(ti); } catch(Exception e) { // Printing the wrapper exception: System.out.println('Wrapper exception: ' + e); // Printing the 'actual' exception: System.out.println('Underlying exception: ' + e.getCause()); } } } class TargetInvocation{ public void Demo() { // Dividing by zero to intentionally throw an exception: System.out.println(10 / 0); } } 

Saída:

 Wrapper exception: java.lang.reflect.InvocationTargetException Underlying exception: java.lang.ArithmeticException: / by zero