1 回答
TA贡献1805条经验 获得超9个赞
这是典型的 ClassLoader 问题。您正在尝试查找当前类加载器未加载的类,因此ClassNotFoundException抛出 a 。
Javadoc将java.lang.Class方法定义为Class.forName(className):
返回与具有给定字符串名称的类或接口关联的 Class 对象。Class.forName(className, true, currentLoader)调用此方法等效于currentLoader表示当前类的定义类加载器。
因此,此方法调用将尝试在当前类加载器上下文中查找指定的类。你试图找到的接口还没有被这个类加载器加载,所以ClassNotFoundException抛出一个。
如果.jar文件在你的应用程序的类路径中,你可以简单地使用系统类加载器来代替,就像这样......
ClassLoader systemClassLoader = ClassLoader.getSystemClassloader();
Class<?> clazz = Class.forName(className, true, systemClassLoader)
...但是如果您的.jar文件位于其他地方,并且尚未加载,您将需要相应地加载它:
ClassLoader urlClassLoader = new URLClassLoader(new URL[]{new URL("path/to/file.jar")});
Class<?> clazz = Class.forName(className, true, urlClassLoader)
添加回答
举报