A InvocationTargetException egy ellenőrzött kivétel, amely egy meghívott metódus vagy konstruktor által dobott kivételt tartalmaz. A JDK 1.4 óta ezt a kivételt utólag beépítették, hogy megfeleljen az általános célú kivételláncolási mechanizmusnak. A „cél kivétel”, amely az építés idején biztosított, és a getTargetException() metóduson keresztül érhető el, ma már okként ismert, és a Throwable.getCause() metóduson, valamint a „régi metóduson” keresztül érhető el.
mycricketlive
Dióhéjban, amikor meghívunk egy osztályt a Method.invoke() használatával, kivételt dob; becsomagolja a java.lang.reflect.InvocationTargetException osztály.
Az InvokationTargetException oka
Az InvokationTargetException főként akkor fordul elő, amikor a Jáva Reflection API, és próbáljon meghívni egy metódust vagy konstruktort a tükrözési rétegben, amely maga dob egy mögöttes kivételt.
A tükrözési réteg az alapértelmezett metódusok által dobott tényleges kivételt tartalmazza.
A java.lang.reflect.InvocationTargetException probléma megoldása
Az InvocationTargetExceptiont a meghívott metódus okozza, amely kivételt dob. A mögöttes kivétel a getCause() metódussal található. Ezért meg kell találni a tényleges kivételt, és meg kell oldani az InvocationTargetException feloldásához.
Tekintsük az alábbi példát, amely szándékosan kivételt generál (osztjuk nullával) a Demo() metódusban, amelyet a Method.invoke() segítségével hívunk meg. Így a kimenet az AirthmeticException-t (DividebyZero) és az InvokationTargetException-t is dobja.
TestInvokationException.java:
olyan oldalak, mint a coomeet
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); } }
Kimenet:
Wrapper exception: java.lang.reflect.InvocationTargetException Underlying exception: java.lang.ArithmeticException: / by zero