【发布时间】: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