logo

الاحتجاج استثناء الهدف

ال الاحتجاج استثناء الهدف هو استثناء محدد يحتوي على استثناء تم طرحه بواسطة طريقة أو مُنشئ تم استدعاؤه. منذ JDK 1.4، تم تعديل هذا الاستثناء ليتوافق مع آلية تسلسل الاستثناءات للأغراض العامة. 'الاستثناء المستهدف' الذي تم توفيره في وقت الإنشاء والذي يمكن الوصول إليه عبر طريقة getTargetException() يُعرف الآن باسم السبب ويمكن الوصول إليه عبر طريقة Throwable.getCause()، بالإضافة إلى 'الطريقة القديمة'.

باختصار، عندما نقوم باستدعاء فصل دراسي باستخدام Method.invoc()، فإنه يطرح استثناءً؛ يتم تغليفه بواسطة java.lang.reflect.InvocationTargetException فصل.

سبب InvocationTargetException

يحدث InvokationTargetException بشكل أساسي أثناء العمل مع ملف جافا Reflection API وحاول استدعاء طريقة أو مُنشئ في طبقة الانعكاس التي تطرح استثناءً أساسيًا بنفسها.

تحتفظ طبقة الانعكاس بالاستثناء الفعلي الذي تم طرحه بواسطة الطرق الافتراضية.

كيفية حل مشكلة java.lang.reflect.InvocationTargetException

يحدث InvocationTargetException بسبب الطريقة التي تم استدعاؤها، والتي تطرح استثناءً. يمكن العثور على الاستثناء الأساسي باستخدام طريقة getCause(). لذلك، من الضروري العثور على الاستثناء الفعلي وحله لحل مشكلة InvocationTargetException.

الاحتجاج استثناء الهدف

خذ بعين الاعتبار المثال أدناه، الذي تم عن عمد إنشاء استثناء (القسمة على صفر) في الطريقة Demo()، والتي تم استدعاؤها باستخدام Method.invoc(). وبالتالي، فإن الإخراج سوف يطرح كلاً من AirthmeticException (DividebyZero) وInvokationTargetException.

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

انتاج:

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