首页 文章

什么可能导致java.lang.reflect.InvocationTargetException?

提问于
浏览
264

好吧,我试图了解并阅读可能导致它的原因,但我无法得到它:

我的代码中有这个地方:

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

事实是,当它试图调用某个方法时,它会抛出 InvocationTargetException 而不是其他一些预期的异常(特别是 ArrayIndexOutOfBoundsException ) . 因为我实际上知道调用了什么方法,所以我直接使用了这个方法代码并为假设抛出 ArrayIndexOutOfBoundsException 的行添加了一个try-catch块,它确实按预期抛出 ArrayIndexOutOfBoundsException . 然而,当它上升时,它会以某种方式更改为 InvocationTargetException 并且在上面的代码中 InvocationTargetException 并且 InvocationTargetException 而不是 ArrayIndexOutOfBoundsException .

什么可能导致这样的行为或我如何检查这样的事情?

13 回答

  • 8
    • 从Eclipse Navigator模式列出所有jar文件

    • 验证所有jar文件是否处于二进制模式

  • 37

    在我执行Clean-> Run xDoclet-> Run xPackaging后,错误消失了 .

    在我的工作区中,在ecllipse中 .

  • 40

    您通过使用反射调用方法添加了额外的抽象级别 . 反射层包装 InvocationTargetException 中的任何异常,这使您可以区分实际由反射调用中的失败引起的异常(例如,您的参数列表无效)和被调用方法中的失败 .

    只需打开 InvocationTargetException 中的原因,你就会得到原始的原因 .

  • 2

    如果抛出异常

    InvocationTargetException - 如果基础方法抛出异常 .

    因此,如果使用反射API调用的方法抛出异常(例如运行时异常),则反射API会将异常包装到_1036620中 .

  • -7

    使用 InvocationTargetException 上的 getCause() 方法检索原始异常 .

  • 290

    来自Method.invoke()的Javadoc

    抛出:InvocationTargetException - 如果基础方法抛出异常 .

    如果调用的方法引发异常,则抛出此异常 .

  • 0

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

    try {
    
        // try code
        ..
        m.invoke(testObject);
        ..
    
    } catch (InvocationTargetException e) {
    
        // Answer:
        e.getCause().printStackTrace();
    } catch (Exception e) {
    
        // generic exception handling
        e.printStackTrace();
    }
    
  • 18

    InvocationTargetException 可能正在收拾你的 ArrayIndexOutOfBoundsException . 在使用反射时,没有预先知道该方法可以抛出什么 - 所以不是使用 throws Exception 方法,所有异常都被捕获并包含在 InvocationTargetException 中 .

  • 2

    This描述的东西,

    InvocationTargetException是一个已检查的异常,它包装被调用的方法或构造函数抛出的异常 . 从版本1.4开始,此异常已经过改进,以符合通用异常链机制 . 在构造时提供并通过getTargetException()方法访问的“目标异常”现在称为原因,可以通过Throwable.getCause()方法以及上述“遗留方法”访问 .

  • 9

    您可以使用getCause()方法与原始异常类进行比较,如下所示:

    try{
      ...
    } catch(Exception e){
       if(e.getCause().getClass().equals(AssertionError.class)){
          // handle your exception  1
       } else {
          // handle the rest of the world exception 
       }
    }
    
  • 0

    我在 class 中的 try / catch 块内的外部 class 中调用了一个 Logger 对象的语句中出现 java.lang.reflect.InvocationTargetException 错误 .

    逐步执行Eclipse调试器中的代码并将鼠标悬停在logger语句上,我看到 Logger objectnull (需要在 class 的最顶部实例化一些外部常量) .

  • 1

    如果底层方法(使用Reflection调用的方法)抛出异常,则抛出此异常 .

    因此,如果由反射API调用的方法抛出异常(例如运行时异常),则反射API会将异常包装到InvocationTargetException中 .

  • -2

    我遇到了同样的问题 . 我使用了e.getCause() . getCause()然后我发现这是因为我传递了错误的参数 . 在获取其中一个参数的值时,存在nullPointerException . 希望这会帮助你 .

相关问题