Lo que podría causar Java.lang.reflejar.Invocaciónexcepción del objetivo?
Bueno, he tratado de entender y leer lo que podría causarlo, pero simplemente no puedo entenderlo:
Tengo esto en algún lugar de mi código:
try{
..
m.invoke(testObject);
..
} catch(AssertionError e){
...
} catch(Exception e){
..
}
La cosa es que, cuando intenta invocar algún método lanza
InvocationTargetException
en lugar de alguna otra excepción esperada (específicamente ArrayIndexOutOfBoundsException
).
Como en realidad sé qué método se invoca, fui directamente a este código de método y agregué un bloque try-catch para la línea que supone lanzar ArrayIndexOutOfBoundsException
y realmente lanzó ArrayIndexOutOfBoundsException
como se esperaba. Sin embargo, al subir se
de alguna manera cambia a InvocationTargetException
y en el código anterior catch(Exception e)
e es InvocationTargetException
y no ArrayIndexOutOfBoundsException
como se esperaba.
¿Qué podría causar tal comportamiento o cómo puedo verificar tal cosa?
13 answers
Has añadido un nivel extra de abstracción llamando al método con reflexión. La capa de reflexión envuelve cualquier excepción en un InvocationTargetException
, lo que le permite distinguir entre una excepción en realidad causada por un error en la llamada de reflexión (tal vez su lista de argumentos no era válida, por ejemplo) y un error dentro del método llamado.
Simplemente desenvuelva la causa dentro del InvocationTargetException
y llegará a la original.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-10 10:13:31
La excepción se lanza si
InvocationTargetException - si el método subyacente arroja una excepción.
Así que si el método, que se ha invocado con la API de reflexión, lanza una excepción (excepción de tiempo de ejecución, por ejemplo), la API de reflexión envolverá la excepción en un InvocationTargetException
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-16 17:01:24
Utilice el método getCause()
en el InvocationTargetException
para recuperar la excepción original.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-05 07:15:56
Del Método Javadoc.invoke ()
Lanza: InvocationTargetException - si el método subyacente lanza una excepción.
Esta excepción se lanza si el método llamado lanza una excepción.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 10:33:09
Esto imprimirá la línea exacta de código en el método específico, que cuando se invoca, genera la excepción:
try {
// try code
..
m.invoke(testObject);
..
} catch (InvocationTargetException e) {
// Answer:
e.getCause().printStackTrace();
} catch (Exception e) {
// generic exception handling
e.printStackTrace();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-26 11:44:27
Que InvocationTargetException
probablemente está terminando su ArrayIndexOutOfBoundsException
. No se puede decir por adelantado cuando se usa la reflexión lo que ese método puede arrojar so por lo que en lugar de usar un enfoque throws Exception
, todas las excepciones están siendo atrapadas y envueltas en InvocationTargetException
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-16 17:01:55
Esto describe algo como,
InvocationTargetException es una excepción marcada que excepción lanzada por un método o constructor invocado. A partir del lanzamiento 1.4, esta excepción se ha adaptado para ajustarse al mecanismo de encadenamiento de excepciones de propósito general. La "excepción de destino" que es se proporciona en el momento de la construcción y se accede a través de la El método getTargetException() ahora se conoce como la causa, y puede ser se accede a través del Lanzable.getCause() método, así como el antes mencionado " método heredado."
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-17 14:12:58
Puedes comparar con la clase de excepción original usando el método getCause() así:
try{
...
} catch(Exception e){
if(e.getCause().getClass().equals(AssertionError.class)){
// handle your exception 1
} else {
// handle the rest of the world exception
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-30 23:49:22
Tuve un error java.lang.reflect.InvocationTargetException
de una instrucción que llama a un objeto logger en un class
externo dentro de un try
/ catch
bloquear en mi class
.
Al pasar por el código en el depurador de Eclipse y pasar el ratón sobre la instrucción logger Vi que el logger object
era null
(algunas constantes externas necesitaban ser instanciadas en la parte superior de mi class
).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-14 09:28:46
Esta excepción se lanza si el método subyacente(método llamado usando Reflexión) lanza una excepción.
Así que si el método, que ha sido invocado por la API de reflexión, lanza una excepción (como por ejemplo la excepción en tiempo de ejecución), la API de reflexión envolverá la excepción en una InvocationTargetException.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-05 09:16:20
Me enfrentaba al mismo problema. Usé e. getCause ().getCause () entonces descubrí que era debido a parámetros incorrectos que estaba pasando. Hubo NullPointerException al buscar el valor de uno de los parámetros. Espero que esto te ayude.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-17 18:10:19
- Lista todos los archivos jar del modo Navegador Eclipse
- Compruebe que todos los archivos jar están en modo binario
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-09 08:37:12
El error desapareció después de que lo hice Limpiar- > Ejecutar XDoclet - >Ejecutar xPackaging.
En mi espacio de trabajo, en ecllipse.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-02 13:32:33