logo

InvokasyonTargetException

InvokasyonTargetException çağrılan bir yöntem veya yapıcı tarafından oluşturulan bir istisnayı tutan kontrol edilen bir istisnadır. JDK 1.4'ten bu yana, bu istisna, genel amaçlı istisna zincirleme mekanizmasına uyacak şekilde yeniden donatıldı. Oluşturma sırasında sağlanan ve getTargetException() yöntemi aracılığıyla erişilen 'hedef istisna' artık neden olarak biliniyor ve 'eski yöntem'in yanı sıra Throwable.getCause() yöntemi aracılığıyla da erişilebilir.

Özetle, Method.invoke() yöntemini kullanarak bir sınıfı çağırdığımızda, sınıf bir istisna atar; tarafından sarılmıştır java.lang.reflect.InvationTargetException sınıf.

InvokationTargetException'ın Nedeni

InvokationTargetException esas olarak Java Reflection API'sini kullanın ve yansıma katmanında temeldeki bir istisnayı atan bir yöntemi veya kurucuyu çağırmayı deneyin.

Yansıma katmanı, varsayılan yöntemler tarafından oluşturulan gerçek istisnayı tutar.

Java.lang.reflect.InvationTargetException Sorunu Nasıl Çözümlenir?

InvokasyonTargetException, bir istisna oluşturan çağrılan yöntemden kaynaklanır. Temel istisna getCause() yöntemi kullanılarak bulunabilir. Bu nedenle, InvokasyonTargetException'ı çözümlemek için gerçek istisnayı bulup çözmek gerekir.

InvokasyonTargetException

Method.invoke() kullanılarak çağrılan Demo() yönteminde kasıtlı olarak bir istisna (sıfıra bölme) oluşturan aşağıdaki örneği düşünün. Böylece çıktı hem AirthmeticException (DividebyZero) hem de InvokationTargetException'ı oluşturacaktır.

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

Çıktı:

javascript'e tıkla
 Wrapper exception: java.lang.reflect.InvocationTargetException Underlying exception: java.lang.ArithmeticException: / by zero