logo

InvocationTargetException

The InvocationTargetException ir pārbaudīts izņēmums, kas satur izņēmumu, ko izsauc izsauktā metode vai konstruktors. Kopš JDK 1.4 šis izņēmums ir modernizēts, lai tas atbilstu vispārēja pielietojuma izņēmumu ķēdes mehānismam. 'Mērķa izņēmums', kas tiek nodrošināts būvniecības laikā un kuram piekļūst, izmantojot metodi getTargetException(), tagad ir zināms kā cēlonis, un tam var piekļūt, izmantojot metodi Throwable.getCause(), kā arī 'mantoto metodi'.

Īsumā, kad mēs izsaucam klasi, izmantojot metodi Method.invoke(), tas rada izņēmumu; tas ir iesaiņots ar java.lang.reflect.InvocationTargetException klasē.

InvokationTargetException iemesls

InvokationTargetException galvenokārt rodas, strādājot ar Java Reflection API un mēģiniet izsaukt metodi vai konstruktoru refleksijas slānī, kas pats rada pamatā esošo izņēmumu.

Atspoguļošanas slānis satur faktisko izņēmumu, ko rada noklusējuma metodes.

Kā atrisināt problēmu java.lang.reflect.InvocationTargetException

Izņēmumu InvocationTargetException izraisa izsauktā metode, kas rada izņēmumu. Pamatā esošo izņēmumu var atrast, izmantojot metodi getCause(). Tāpēc ir jāatrod faktiskais izņēmums un jāatrisina tas, lai atrisinātu problēmu InvocationTargetException.

InvocationTargetException

Apsveriet tālāk sniegto piemēru, kas apzināti ģenerē izņēmumu (dalīt ar nulli) metodē Demo(), kas tiek izsaukta, izmantojot metodi Method.invoke(). Tādējādi izvade iemetīs gan AirthmeticException (DividebyZero), gan 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); } } 

Izvade:

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