嗯,我试着去理解和解读导致它的原因,但我就是不明白:

在我的代码中有这样的代码:

 try{
 ..
 m.invoke(testObject);
 ..
 } catch(AssertionError e){
 ...
 } catch(Exception e){
 ..
 }

Thing is that, when it tries to invoke some method it throws InvocationTargetException instead of some other expected exception (specifically ArrayIndexOutOfBoundsException). As I actually know what method is invoked I went straight to this method code and added a try-catch block for the line that suppose to throw ArrayIndexOutOfBoundsException and it really threw ArrayIndexOutOfBoundsException as expected. Yet when going up it somehow changes to InvocationTargetException and in the code above catch(Exception e) e is InvocationTargetException and not ArrayIndexOutOfBoundsException as expected.

是什么导致了这样的行为或者我如何检查这样的事情?


当前回答

问题还可能是targetSdkVersion升级了,并且您使用了已弃用的Gradle清单特性。尝试再次降低targetSdkVersion,看看它是否有效。在我的例子中,它是targetSdkVersion 31 -> 30

其他回答

列出Eclipse Navigator模式下的所有jar文件 验证所有jar文件都是二进制模式

这将打印特定方法中的精确代码行,当调用该方法时,会引发异常:

try {

    // try code
    ..
    m.invoke(testObject);
    ..

} catch (InvocationTargetException e) {

    // Answer:
    e.getCause().printStackTrace();
} catch (Exception e) {

    // generic exception handling
    e.printStackTrace();
}

我有一个java.lang.reflect.InvocationTargetException错误,来自在我的类的try / catch块内部的外部类中调用记录器对象的语句。

在Eclipse调试器中遍历代码并将鼠标悬停在记录器语句上,我看到记录器对象为空(一些外部常数需要在类的最顶部实例化)。

它描述的是,

InvocationTargetException是包装对象的受控异常 由被调用的方法或构造函数引发的异常。截至发布 1.4,此异常已进行了改进,以符合通用异常链接机制。即“目标异常” 在施工时提供,并通过 getTargetException()方法现在被认为是原因,并且可能是 可以通过Throwable.getCause()方法访问 前面提到的“遗留方法”。

来自Method.invoke()的Javadoc

如果底层方法抛出异常,则抛出:InvocationTargetException。

如果调用的方法抛出异常,则抛出此异常。