Comprender el error java.lang.reflect.InvocationTargetException en Java
-
el error
java.lang.reflect.InvocationTargetException
en Java -
Causas del error
java.lang.reflect.InvocationTargetException
-
Solucione el error
java.lang.reflect.InvocationTargetException
en Java - Conclusión
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.
Artículo relacionado - Java Error
- Arreglar Java fue iniciado por el código de salida devuelto = 1
- Arreglar JAVA_HOME no se puede determinar a partir del error de registro en R
- Arreglar java.io.IOException: No queda espacio en el dispositivo en Java
- Arreglar Java.IO.NotSerializableException en Java
- Arreglar Java.Lang.IllegalStateException de Android: no se pudo ejecutar el método de la actividad
- Arreglar Java.Lang.NoClassDefFoundError: No se pudo inicializar el error de clase