首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跨类加载器类加载

跨类加载器类加载
EN

Stack Overflow用户
提问于 2015-07-02 00:18:55
回答 1查看 298关注 0票数 0

我有一个CustomClassLoader,它从Map<String, byte[]>加载类。我要加载的类依赖于其他卸载的类。在UrlClassLoader中包含上述类的jar文件在CustomClassLoader之前启动,但是当CustomClassLoader试图加载具有外部导入(UrlClassLoader中的jar文件)的类时,会引发异常:

代码语言:javascript
运行
复制
Exception in thread "main" java.lang.NoClassDefFoundError: external/class/in/urlclassloader/ClassImportedByLoadedClass
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:642)
    at CustomClassLoader.defineClass(EncryptedByteArrayClassLoader.java:35)

我需要一些方法来:

( a)加载URLClassLoader中的所有类

( b)有某种方法将URLClassLoader设置为从内存加载的类(而不是我的CustomClassLoader)的默认ClassLoader。

第35行:

代码语言:javascript
运行
复制
public Class<?> defineClass(String name, byte[] bytes) {
    return super.defineClass(name, bytes, 0, bytes.length);
}

我尝试过将上下文ClassLoader设置为:

代码语言:javascript
运行
复制
Thread.currentThread().setContextClassLoader(jarLoader);

其中jarLoader是URLClassLoader

有什么办法能完成我想做的事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-02 00:55:14

您应该在您的ClassLoader(ClassLoader parent)中重写CustomClassLoader构造函数,并将URLClassLoader传递到那里:

代码语言:javascript
运行
复制
class CustomClassLoader extends ClassLoader {
     public CustomClassLoader(URLClassLoader parent, ...your data...) {
         super(parent);
         ...
     }
}

CustomClassLoader customClassLoader = new CustomClassLoader(jarLoader, ...);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31173719

复制
相关文章

相似问题

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