Comprender el error java.lang.reflect.InvocationTargetException en Java

Suraj P 12 octubre 2023
  1. el error java.lang.reflect.InvocationTargetException en Java
  2. Causas del error java.lang.reflect.InvocationTargetException
  3. Solucione el error java.lang.reflect.InvocationTargetException en Java
  4. Conclusión
Comprender el error java.lang.reflect.InvocationTargetException en Java

En este artículo, aprenderemos sobre java.lang.reflect.InvocationTargetException en Java.

el error java.lang.reflect.InvocationTargetException en Java

La excepción java.lang.reflect.InvocationTargetException es una excepción muy común cuando un desarrollador trabaja con la API Java Reflection. Una excepción marcada contiene una excepción lanzada por el método invocado o un constructor.

A partir del lanzamiento de JDK 1.4,, esta excepción se actualizó para ajustarse al mecanismo de encadenamiento de excepciones de propósito general. En resumen, cada vez que un desarrollador intenta invocar una clase utilizando Method.invoke(), obtenemos InvocaciónTargetException y se envuelve con java.lang.reflect.InvocationTargetException.

Causas del error java.lang.reflect.InvocationTargetException

La InvocaciónTargetException ocurre principalmente cuando un desarrollador está trabajando con la capa de reflexión e intenta invocar un constructor o un método que arroja una excepción subyacente. Entonces, la API de reflexión de Java envuelve la excepción lanzada por el método con la InvocaciónTargetException.

Veamos un ejemplo de código para entenderlo mejor.

Código de ejemplo:

import java.lang.reflect.*;

public class Test {
  public int divideByZero() {
    return 89 / 0;
  }

  public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException {
    Test obj = new Test();
    Method method = Test.class.getMethod("divideByZero");
    try {
      method.invoke(obj);
    } catch (InvocationTargetException e) {
      e.printStackTrace();
    }
  }
}

Producción :

java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at Test.main(Test.java:13)
Caused by: java.lang.ArithmeticException: / by zero
    at Test.divideByZero(Test.java:6)
    ... 5 more

Solucione el error java.lang.reflect.InvocationTargetException en Java

Con base en lo anterior, entendimos que la excepción subyacente es el motivo del error java.lang.reflect.InvocationTargetException. Podemos obtener más información sobre la excepción subyacente utilizando el método getCause () de la clase Throwable.

Por lo tanto, resolver la InvocaciónTargetException implica encontrar y resolver la excepción subyacente.

Código de ejemplo:

import java.lang.reflect.*;

public class Test {
  public int divideByZero() {
    return 89 / 0;
  }

  public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException {
    Test obj = new Test();
    Method method = Test.class.getMethod("divideByZero");
    try {
      method.invoke(obj);
    } catch (InvocationTargetException e) {
      System.out.println(e.getCause());
    }
  }
}

Producción :

java.lang.ArithmeticException: / by zero

En el resultado anterior, la excepción subyacente real es ArithmeticException, que ocurre porque estamos dividiendo por cero.

Una vez que solucionamos la excepción subyacente, también se resuelve la InvocaciónTargetException. El siguiente es el código de trabajo completo sin excepciones; Acabamos de eliminar la parte de dividir por cero.

Código fuente completo:

import java.lang.reflect.*;

public class Test {
  public int divideByZero() {
    return 89 / 9;
  }

  public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException {
    Test obj = new Test();
    Method method = Test.class.getMethod("divideByZero");
    try {
      method.invoke(obj);
    } catch (InvocationTargetException e) {
      e.printStackTrace();
    }
  }
}

Conclusión

En este artículo, aprendimos cómo se ajustan las excepciones subyacentes cuando trabajamos en la capa de reflexión en Java. Entendimos cómo obtener la excepción subyacente al trabajar con java.lang.reflect.InvocationTargetException y cómo resolverla.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Artículo relacionado - Java Error