【问题标题】:Using class.forname().newInstance() and "com.sun.jdi.InvocationException occurred invoking method" exception使用 class.forname().newInstance() 和“com.sun.jdi.InvocationException 发生调用方法”异常
【发布时间】:2011-07-12 00:21:45
【问题描述】:

我正在使用 class.forname 创建一个新的类实例。类名来自一个属性。

假设我在两个包中有几个类。

com.package.Parser1
com.package.Parser2
com.package.Parser3

net.package.parser4
net.package.parser5
net.package.parser6

上述包中也存在以下类(这个没有实例化)

com.package.ParserLoader
com.package.ParserInterface
net.package.GenericParser

在初始化时,上述解析器被放入一个向量中。然后访问该向量并使用其类名初始化每个类,如下所示

while (tokens.hasMoreTokens())

        parsers.addElement(

            Class.forName((String) tokens.nextToken()).newInstance());
    }catch(Exception e){
        e.printStackTrace();
    }

上面的代码在 ParserLoader 类中,它与解析器 1、2、3 在同一个包中。

解析器 1、2 和 3 都实现了 ParserInterface。 解析器 4,5 和 6 都扩展了抽象的 GenericParser。 GenericParser 实现 ParserInterface。

当我运行上面的代码时,它会生成如下所示的异常

com.sun.jdi.InvocationException occurred invoking method

任何想法为什么会发生这种情况?

编辑

我遇到的另一个问题是我看不到任何堆栈跟踪。没有堆栈跟踪!当我调试应用程序并查看解析器向量的内容时,我只在 Eclipse 中看到该错误。向量应该包含对解析器对象的引用。 com.package.* 包中的解析器很好,但它没有在 net.package.* 包中创建任何解析器的实例。

【问题讨论】:

  • 请发布完整的堆栈跟踪。
  • 那是我遇到的另一个问题。没有堆栈跟踪!当我调试它并查看解析器向量的内容时,我只在 Eclipse 中看到该错误。这应该包含解析器对象的引用。 com.package.* 包中的解析器很好,但它没有在 net.package.* 包中创建任何解析器的实例。
  • 该异常来自调试界面。 (可能与调试器的接口有问题,所以我添加了 eclipse 标签。)
  • 这是什么意思?您的意思是它不是应用程序的例外,而是 Eclipse IDE 的例外?

标签: java eclipse jakarta-ee introspection


【解决方案1】:

com.package.ParserInterface 听起来像一个接口,您无法从接口创建实例。

【讨论】:

  • 不,它不实例化接口。见编辑。谢谢
【解决方案2】:

我认为如果你的构造函数搞砸了或者在创建解析器时有其他东西被破坏了,你会得到这个异常。看看这个:http://download.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/InvocationException.html,并尝试从您的异常中获取更多信息。

【讨论】:

    【解决方案3】:

    如果您在调试窗格的Variables 选项卡的value 列中获得com.sun.jdi.InvocationException,则很可能您的Preferences-Java-Debug-Detail 格式化程序设置为针对变量值显示toString()

    如果对象尚未完全构建,但toString() 调用了一个尚未获得数据的方法,则调用异常是预期的并且很有帮助。

    要查看更好但多余的文本,请选中 In detail pane only 选项(或与您的 Eclipse 版本相关的任何内容)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 2016-01-08
      • 2011-01-06
      • 2013-10-25
      • 1970-01-01
      相关资源
      最近更新 更多