logo

InvocationTargetException

The InvocationTargetException on tarkistettu poikkeus, joka sisältää kutsutun metodin tai konstruktorin heittämän poikkeuksen. JDK 1.4:n jälkeen tämä poikkeus on jälkiasennettu yleisen poikkeusten ketjutusmekanismin mukaiseksi. Kohdepoikkeus, joka tarjotaan rakentamisen aikana ja jota käytetään getTargetException()-menetelmällä, tunnetaan nyt syynä, ja sitä voidaan käyttää Throwable.getCause()-metodilla sekä 'vanhalla menetelmällä'.

Lyhyesti sanottuna, kun kutsumme luokan käyttämällä Method.invoke(), se heittää poikkeuksen; se on kääritty java.lang.reflect.InvocationTargetException luokkaa.

InvokationTargetExceptionin syy

InvokationTargetException esiintyy pääasiassa työskennellessäsi Java Reflection API ja yritä kutsua menetelmää tai konstruktoria heijastuskerroksessa, joka heittää itse taustalla olevan poikkeuksen.

Heijastuskerros sisältää oletusmenetelmien aiheuttaman todellisen poikkeuksen.

Java.lang.reflect.InvocationTargetException-ongelman ratkaiseminen

InvocationTargetExceptionin aiheuttaa kutsuttu menetelmä, joka heittää poikkeuksen. Taustalla oleva poikkeus voidaan löytää käyttämällä getCause()-metodia. Siksi on tarpeen löytää todellinen poikkeus ja ratkaista se InvocationTargetExceptionin ratkaisemiseksi.

InvocationTargetException

Tarkastellaan alla olevaa esimerkkiä, joka luo tarkoituksella poikkeuksen (jakaa nollalla) menetelmässä Demo(), joka kutsutaan Method.invoke() -menetelmällä. Siten tulos heittää sekä AirthmeticExceptionin (DividebyZero) että InvokationTargetExceptionin.

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); } } 

Lähtö:

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