The InvocationTargetException це перевірений виняток, який містить виняток, викликаний викликаним методом або конструктором. Починаючи з JDK 1.4, цей виняток було модернізовано, щоб відповідати механізму ланцюжка винятків загального призначення. «Цільовий виняток», який надається під час створення та доступ до якого здійснюється за допомогою методу getTargetException(), тепер відомий як причина, і до нього можна отримати доступ через метод Throwable.getCause(), а також «застарілий метод».
У двох словах, коли ми викликаємо клас за допомогою Method.invoke(), він створює виняток; він обгорнутий java.lang.reflect.InvocationTargetException клас.
Причина InvokationTargetException
Виняток InvokationTargetException в основному виникає під час роботи з Java Reflection API і спробуйте викликати метод або конструктор на рівні відображення, який сам створює базовий виняток.
Кат тимпф
Рівень відображення містить фактичний виняток, створений методами за замовчуванням.
Як вирішити java.lang.reflect.InvocationTargetException
Виняток InvocationTargetException спричинений викликаним методом, який створює виняток. Базовий виняток можна знайти за допомогою методу getCause(). Таким чином, необхідно знайти фактичний виняток і вирішити його, щоб вирішити InvocationTargetException.
Розглянемо наведений нижче приклад, у якому навмисно генерується виняткова ситуація (ділення на нуль) у методі Demo(), який викликається за допомогою Method.invoke(). Таким чином, виведення викличе як AirthmeticException (DividebyZero), так і 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); } }
Вихід:
Wrapper exception: java.lang.reflect.InvocationTargetException Underlying exception: java.lang.ArithmeticException: / by zero