【发布时间】:2013-01-25 10:56:15
【问题描述】:
我在从动态加载的类中动态加载 java 类时遇到问题。
我的类是一个ImageJ 插件,它通过classloader 动态加载其他模块。在加载引用与ImageJ 插件位于同一包中的内容的模块时,我有NoClassDefFoundError。
我真正做的是:
- ImageJ 加载插件 (A)
- (A) 获取系统类加载器
- (A) 将jar url 添加到类加载器
- (A) 尝试使用
Class.forName在 jar 中加载所需的类 (B)
我无法加载 B 类,因为我得到了一个 NoClassDefFoundError,这是由于 B 指向 A 中的一个类,而该类在当前类加载器中找不到。
我认为我首先需要使用用于加载插件的相同类加载器ImageJ,以便能够加载我的模块并仍然找到对以前由ImageJ 加载的jar 的引用。我想这样做而不必重新编译ImageJ。
有没有什么方法可以解决这个问题而不必更新ImageJ 代码或修改它?
伪类示例
package a;
class A extends PlugInFrame {}
package a;
class C extends MyOwnPlugIn {}
package b;
import a;
class B extends C {}
【问题讨论】:
标签: java class dynamic imagej reloading