java 加载类失败_java-动态类加载在运行时失败

在尝试运行Java代码动态加载`org.junit.runner.JUnitCore`类时,遇到了`NoClassDefFoundError`。错误发生在强制类型转换时,尽管`println`成功打印了类名。问题在于主类由系统类加载器加载,该加载器的类路径中没有JUnit。解决方案是创建一个单独的类,该类直接访问JUnitCore,并在包含JUnit的URLClassLoader路径上加载这个新类,再通过反射调用其方法。
摘要由CSDN通过智能技术生成

我有以下Java代码段:

final Class> junitCoreClass = AccessController.doPrivileged(

new PrivilegedAction() {

@Override

public URLClassLoader run() {

return new URLClassLoader(new URL[] { junitJarUrl });

}

}).loadClass("org.junit.runner.JUnitCore");

System.out.println(junitCoreClass.getName());

final JUnitCore junitCore = (JUnitCore) junitCoreClass.newInstance();

这样编译就可以了.但是,当我尝试运行它时,会发生一些奇怪的事情.在最后一行抛出java.lang.NoClassDefFoundError,引用刚刚加载的类.奇怪的是,println打印确切的类名.

我检查了一下是否将新的实例引用保留为Object并仅通过反射对其进行操作,一切都很好,因此,令人讨厌的代码段必须是显式的强制转换.

有人可以向我解释为什么会发生这种情况,还可以告诉我如何实现自己的目标吗?

PS:对于那些想要查看更近的堆栈轨迹的人来说,没有什么值得展示的:

java.lang.NoClassDefFoundError: org/junit/runner/JUnitCore

at [last line of example)

[lines from my app]

Caused by: java.lang.ClassNotFoundException: org

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值