我有以下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.junit.runner.JUnitCore

at java.net.URLClassLoader$1.run(URLClassLoader.java:200)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:188)

at java.lang.ClassLoader.loadClass(ClassLoader.java:315)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)

at java.lang.ClassLoader.loadClass(ClassLoader.java:250)

at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)

at [last line of example]

[lines from my app]

解决方法:

问题是您的主类是由在类路径上没有JUnit的系统类加载器(包含-classpath的加载器)加载的.然后,创建一个单独的类加载器,该类加载器在类路径上仅具有JUnit.当您的主类尝试转换为JUnitCore时,系统类加载器将被要求加载JUnitCore(它不包含该类),因此发生NoClassDefFoundError.

如果不使用反射,就没有便捷的方法来执行您要执行的操作.您将需要(1)创建一个单独的直接访问JUnitCore的类,(2)在URLClassLoader(目录或JAR)上包含该类的路径,(3)使用反射来加载该类,以及(4)使用反射来在该类上调用一个方法.

标签:exception,dynamic,java,classloader

来源: https://codeday.me/bug/20191210/2098773.html

java 加载类失败_java-动态类加载在运行时失败相关推荐

  1. java 加载类java_深入研究Java类加载机制

    深入研究Java类加载机制 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比 ...

  2. 【Java 19】反射 - 反射机制概述、获取Class实例、类的加载与ClassLoader的理解、创建运行时类的对象、获取运行时类的完整结构、调用运行时类的指定结构、动态代理

    反射机制概述.获取Class实例.类的加载与ClassLoader的理解.创建运行时类的对象.获取运行时类的完整结构.调用运行时类的指定结构.动态代理 反射 1 Java反射机制概述 1.1 Java ...

  3. java动态加载类 框架_java运用RMI框架类的动态加载不成功

    最近在看<java网络编程精解>,第11章中用RMI动态加载类,可怎么试都不成功,求大神解答 1. 我先在C盘下启动了rmiregistry注册表,如果部署成功注册表应该会从codebas ...

  4. 关于Java加载类顺序的问题

    具体参考自https://blog.csdn.net/changerzhuo_319/article/details/78925184 直接上结论: 相同的类就加载顺序为: (0)同一个ClassLo ...

  5. java加载字体文件_Java的加载自定义字体文件(.TTF)

    我在下面这段代码中使用,并将其与该堆栈跟踪出现:Java的加载自定义字体文件(.TTF) java.io.FileNotFoundException: font.ttf (No such file o ...

  6. java加载xml配置文件_java读取配置文件的几种方法

    原标题:java读取配置文件的几种方法 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小总结一下,主要叙述的是spring ...

  7. java加载不进去_java sql添加不进去

    运行显示的成功,没有报错,但是数据库里面没有数据staticjtscreenjs=newjtscreen();privatestaticStringnicheng=js.getText();stati ...

  8. 28 Java类的加载机制、什么是类的加载、类的生命周期、加载:查找并加载类的二进制数据、连接、初始化、类加载器、双亲委派模型、自定义类加载器

    28Java类的加载机制 28.1.什么是类的加载 28.2.类的生命周期 28.2.1.加载:查找并加载类的二进制数据 28.2.2.连接 28.2.3.初始化 28.3.类加载器 28.4.类的加 ...

  9. Java 动态加载类

    Class.forName("类的全称"); 不仅表示类的类类型,还代表了动态加载类 请大家区分编译.运行 编译时刻加载类时静态加载类.运行时刻加载类时动态加载类 编写一个Offi ...

  10. 使用forName动态加载类文件

    动态加载(Dynamic Loading)是指在程序运行时加载需要的类库文件,对Java程序来说,一般情况下,一个类文件在启动时或首次初始化时会被加载到内存中,而反射则可以在运行时再决定是否需要加载一 ...

最新文章

  1. Docker 和 Kubernetes 从听过到略懂:给程序员的旋风教程
  2. php input多选,利用css3更改input单选和多选样式的方法
  3. Windows下程序启动时出现0xc000007b错误的解决方案
  4. linux 查找进程 删除进程 命令
  5. leetcode155. 最小栈
  6. mysql语句随机数_程序生成随机数与SQL语句生成随机数
  7. 对齐方式有那些_Excel基础:开始菜单之对齐方式,那些被遗忘的实用功能
  8. 输入符号,宽,高,打印此符号组成的矩形
  9. scala中zip拉链的操作
  10. html远程连接mysql_mysql允许远程连接
  11. 阿里云服务器搭建 Redis 集群
  12. ios gif的分解和展示
  13. curry化 js_认识 科里化(curry)——JS函数式编程
  14. 基于C#的网站地图制作
  15. 微软展示Windows 8新LOGO:倾斜纯蓝色窗口
  16. matlab生成n阶O型方阵,matlab教程 06
  17. 一、Tableau 基本介绍
  18. “大数据杀熟”谁之祸?
  19. 01组团队项目-Alpha冲刺-6/6
  20. 在字符串中查找指定字符

热门文章

  1. 如何用ChemDraw实现3D建模
  2. Excel:sumifs函数
  3. 【论文阅读】Conversational Memory Networkfor Emotion Recognition in Dyadic Dialogue Videos
  4. 虾皮马来西亚站如何选品?附快速出单秘诀
  5. 玩转华为ENSP模拟器系列 | 配置L3VdPdNd迭代SR-BE隧道示例
  6. 全球最好听、最值得听的100首英文歌曲。(每首都有下载地址)
  7. IOS之 UITableview的简单使用
  8. 智力游戏教案c语言代码,幼儿园智力游戏教案有哪些
  9. 何谓赛道思维?隔壁阿三加密货币赛道重启,我们何时迎头赶上?
  10. 经典SQL查询语句大全