嗯,我试图理解和读到的东西可能会导致它,但我只是无法得到它:什么可能导致java.lang.reflect.InvocationTargetException?
我有我的代码某处这样的:
try{
..
m.invoke(testObject);
..
} catch(AssertionError e){
...
} catch(Exception e){
..
}
的事情是,当它试图调用它抛出的某些方法 InvocationTargetException
而不是某些其他预期的异常(具体为ArrayIndexOutOfBoundsException
)。 正如我真的知道调用什么方法,我直接去了这个方法代码,并添加了一个try-catch块,假设这个代码块会抛出ArrayIndexOutOfBoundsException
,并且它真的按照预期投掷了ArrayIndexOutOfBoundsException
。然而,当它上涨时 以某种方式改变为InvocationTargetException
并且在上面的代码中catch(Exception e)
e是InvocationTargetException
而不是ArrayIndexOutOfBoundsException
如预期的那样。
什么会导致这样的行为,或者我该如何检查这样的事情?
谢谢,但是我会怎样区分(AssertionError e)和(Exception e)?如果我在展开原因之前总是首先得到InvocationTargetException,那么每个异常之间的区别在哪里? – user550413 2011-05-16 17:32:51
@ user550413:当然,解开异常并检查它。你可以随时扔掉它,如果必须的话就可以用它来捕捉它。 – 2011-05-16 17:53:21
对于任何人想知道“在InvocationTargetException中解开原因”是什么意思,我只是发现如果你使用'exception.printStackTrace()'打印它,你只需看看“Caused By:”而不是上半部分/正常部分。 – Jan 2012-02-10 19:42:39