그만큼 InvocationTargetException 호출된 메서드나 생성자에서 발생한 예외를 보유하는 확인된 예외입니다. JDK 1.4부터 이 예외는 범용 예외 체인 메커니즘을 따르도록 개선되었습니다. 생성 시 제공되고 getTargetException() 메소드를 통해 액세스되는 '대상 예외'는 이제 원인으로 알려져 있으며 '레거시 메소드'는 물론 Throwable.getCause() 메소드를 통해 액세스할 수 있습니다.
간단히 말해서 Method.invoke()를 사용하여 클래스를 호출하면 예외가 발생합니다. 그것은에 의해 포장된다 java.lang.reflect.InvocationTargetException 수업.
InvokationTargetException의 원인
InvokationTargetException은 주로 작업하는 동안 발생합니다. 자바 Reflection API를 사용하여 기본 예외 자체를 발생시키는 리플렉션 레이어의 메서드나 생성자를 호출해 보세요.
반사 레이어는 기본 메서드에서 발생한 실제 예외를 보유합니다.
java.lang.reflect.InvocationTargetException을 해결하는 방법
InvocationTargetException은 예외를 발생시키는 호출된 메소드로 인해 발생합니다. 기본 예외는 getCause() 메서드를 사용하여 찾을 수 있습니다. 따라서 InvocationTargetException을 해결하기 위해서는 실제 예외를 찾아서 해결하는 과정이 필요합니다.
Method.invoke()를 사용하여 호출되는 Demo() 메소드에서 의도적으로 예외(0으로 나누기)를 생성하는 아래 예제를 고려하십시오. 따라서 출력에서는 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