logo

InvocationTargetExceptionInvocationTargetException

Le InvocationTargetExceptionInvocationTargetException est une exception vérifiée qui contient une exception levée par une méthode ou un constructeur invoqué. Depuis JDK 1.4, cette exception a été mise à niveau pour se conformer au mécanisme général de chaînage des exceptions. L'« exception cible » fournie au moment de la construction et accessible via la méthode getTargetException() est désormais connue comme la cause et est accessible via la méthode Throwable.getCause(), ainsi que la « méthode héritée ».

En un mot, lorsque nous invoquons une classe à l’aide de Method.invoke(), elle lève une exception ; il est enveloppé par le java.lang.reflect.InvocationTargetException classe.

Cause de l’exception InvokationTargetException

L'InvokationTargetException se produit principalement lorsque vous travaillez avec le Java API de réflexion et essayez d'invoquer une méthode ou un constructeur dans la couche de réflexion qui lève elle-même une exception sous-jacente.

La couche de réflexion contient l'exception réelle levée par les méthodes par défaut.

Comment résoudre l'exception java.lang.reflect.InvocationTargetException

L'InvocationTargetException est provoquée par la méthode invoquée, qui lève une exception. L'exception sous-jacente peut être trouvée à l'aide de la méthode getCause(). Par conséquent, il est nécessaire de trouver l’exception réelle et de la résoudre pour résoudre l’InvocationTargetException.

InvocationTargetExceptionInvocationTargetException

Considérez l'exemple ci-dessous, qui génère intentionnellement une exception (divisée par zéro) dans la méthode Demo(), qui est invoquée à l'aide de Method.invoke(). Ainsi, la sortie lancera à la fois AirthmeticException (DividebyZero) et 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); } } 

Sortir:

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