logo

InvocationTargetException

De InvocationTargetException er et sjekket unntak som inneholder et unntak som er kastet av en påkalt metode eller konstruktør. Siden JDK 1.4 har dette unntaket blitt ettermontert for å samsvare med den generelle unntaks-kjedemekanismen. 'Target-unntaket' som er gitt ved konstruksjonstidspunktet og tilgang via getTargetException()-metoden er nå kjent som årsaken og kan nås via Throwable.getCause()-metoden, så vel som 'legacy-metoden'.

I et nøtteskall, når vi starter en klasse ved å bruke Method.invoke(), gir den et unntak; den er pakket inn av java.lang.reflect.InvocationTargetException klasse.

Årsak til InvokationTargetException

InvokationTargetException oppstår hovedsakelig mens du arbeider med Java Reflection API og prøv å påkalle en metode eller konstruktør i refleksjonslaget som kaster et underliggende unntak selv.

Refleksjonslaget inneholder det faktiske unntaket som er kastet av standardmetodene.

Slik løser du java.lang.reflect.InvocationTargetException

InvocationTargetException er forårsaket av den påkalte metoden, som gir et unntak. Det underliggende unntaket kan bli funnet ved å bruke getCause()-metoden. Derfor er det nødvendig å finne det faktiske unntaket og løse det for å løse InvocationTargetException.

katrina kaif
InvocationTargetException

Tenk på eksemplet nedenfor, som med vilje genererer et unntak (delt på null) i metoden Demo(), som påkalles ved hjelp av Method.invoke(). Dermed vil utgangen kaste både AirthmeticException (DividebyZero) og 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); } } 

Produksjon:

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