首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ImageJ插件动态加载类

从ImageJ插件动态加载类
EN

Stack Overflow用户
提问于 2013-01-25 10:56:15
回答 2查看 378关注 0票数 1

我在从动态加载类中动态加载java类时遇到了问题。

我的类是一个ImageJ插件,它通过classloader动态地加载其他模块。在加载模块时,我有NoClassDefFoundError,该模块引用与ImageJ插件相同的包中的某些内容。

我要做的就是:

  1. ImageJ加载插件(A)
  2. (A)获取系统类加载程序
  3. (A)在类装入器中添加jar url
  4. (A)尝试使用Class.forName在jar中加载所需的类(B)

我无法加载B类,因为B指向A中没有在当前类加载器中找到的类导致了NoClassDefFoundError

我认为我首先需要使用用于加载插件的类加载器ImageJ来加载我的模块,并且仍然可以找到以前由ImageJ加载的jars的引用。我想这样做,而不必重新编译ImageJ

有什么方法可以解决这个问题,而不必插入ImageJ代码或修改它呢?

伪类示例

代码语言:javascript
复制
package a;
class A extends PlugInFrame {}


package a;
class C extends MyOwnPlugIn {}

代码语言:javascript
复制
package b;
import a;
class B extends C {}
EN

回答 2

Stack Overflow用户

发布于 2013-01-26 17:56:41

最简单的方法是通过使用类来避免动态但直接地加载类。

如果没有这种方法,最好的方法是确保.jar文件都在ImageJ的插件/文件夹中(或者如果您使用斐济,非插件.jar文件驻留在jars/中),并使用ImageJ的插件类加载器: IJ.getClassLoader().loadClass("blub");

注意,步骤3是一个大的不-不:您永远不应该向系统类装入器的类路径中添加元素。

还请注意,所有的ImageJ专家都可以通过imagej@list.nih.gov联系到,而不是通过在StackOverflow上发布。

票数 2
EN

Stack Overflow用户

发布于 2013-01-25 12:00:24

我不确定您是否需要动态加载这些类,但需要获得A的类加载器

代码语言:javascript
复制
ClassLoader classLoader = A.getClass().getClassLoader()

然后使用它来安装B,记住B需要有一个no argument constructor

为什么不构建包含B的插件jar文件呢?我已经创建了一堆插件,通常我会添加依赖项,然后构建插件jar文件,其中包含了它所需要的所有依赖项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14520354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档