ClassLoader 加载有父类和初始化过的类解决java.lang.NoClassDefFoundError 和InvocationTargetExc...

最近因ClassLoader 加载动态类 费了很大劲 最终高人指点解决 贴出来大家分享一下
因为加载的类中有父类和 和其它引用类 并且都初始化和使用过 问题就是因为这
这是个是自定义ClassLoad类
import java.io.ByteArrayOutputStream;
import java.io.InputStream;

public class ClassLoad extends ClassLoader {
ClassLoad(ClassLoader parent) {
super(parent); //这个很重要解决父类用过的问题
}

private static ClassLoad instance = null;
static InputStream in = null;

public static ClassLoad getInstance(InputStream in,ClassLoader parent) {
try {
instance = new ClassLoad(parent);
ClassLoad.in = in;

} catch (Exception e) {
System.out.println(e.toString());
}
return instance;
}

@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
int n;
while ((n = in.read()) != -1) {
out.write(n);
}
byte b[]=out.toByteArray();
in.close();
Class<?> myclass = findLoadedClass("parser.YouJiuBaGuaParser");
if (myclass == null) {
myclass = defineClass(null,b, 0, b.length);
return myclass;
} else {
return myclass;
}
} catch (Exception e) {
System.out.println(e.toString());
return null;
}
}
}

下边这个是普通类在调用 in 是从数据库或从硬盘上取了的InputStream流这个abc是象征性的东西没用大家可自行修改
Class<?> c = ClassLoad.getInstance(in,this.getClass().getClassLoader()).findClass("abc");


parser.YouJiuBaGuaParser这个是我的包名还有类名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值