logo

InvocationTargetException

The InvocationTargetException este o excepție verificată care deține o excepție aruncată de o metodă sau un constructor invocat. De la JDK 1.4, această excepție a fost adaptată pentru a se conforma mecanismului de înlănțuire a excepțiilor de uz general. „Excepția țintă” care este furnizată în momentul construcției și accesată prin metoda getTargetException() este acum cunoscută drept cauză și poate fi accesată prin metoda Throwable.getCause(), precum și prin „metoda moștenită”.

Pe scurt, atunci când invocăm o clasă folosind Method.invoke(), aceasta aruncă o excepție; este învelit de java.lang.reflect.InvocationTargetException clasă.

Cauza InvokationTargetException

InvokationTargetException apare în principal în timpul lucrului cu Java Reflection API și încercați să invocați o metodă sau un constructor în stratul de reflectare care aruncă în sine o excepție de bază.

Stratul de reflexie deține excepția reală aruncată de metodele implicite.

Cum se rezolvă excepția java.lang.reflect.InvocationTargetException

Excepția InvocationTargetException este cauzată de metoda invocată, care aruncă o excepție. Excepția de bază poate fi găsită folosind metoda getCause(). Prin urmare, este necesar să găsiți excepția reală și să o rezolvați pentru a rezolva InvocationTargetException.

InvocationTargetException

Luați în considerare exemplul de mai jos, care generează intenționat o excepție (împărțire la zero) în metoda Demo(), care este invocată folosind Method.invoke(). Astfel, rezultatul va arunca atât AirthmeticException (DividebyZero) cât și 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); } } 

Ieșire:

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