gpt4 book ai didi

java - 使用 class.forname().newInstance() 和 "com.sun.jdi.InvocationException occurred invoking method"异常

转载 作者:行者123 更新时间:2023-12-02 00:44:53 25 4
gpt4 key购买 nike

我正在使用 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

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

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

有什么想法为什么会发生这种情况吗?

编辑

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

最佳答案

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

关于java - 使用 class.forname().newInstance() 和 "com.sun.jdi.InvocationException occurred invoking method"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5248176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com