【发布时间】:2018-11-08 01:11:18
【问题描述】:
我一直在尝试在代码运行时通过绝对路径导入 .class,但我不知道该怎么做。
我通过Class.forName();找到了一种在项目的构建路径中导入类的方法,但我需要找到一种方法来加载不在构建路径中的类。
目标是:
- 用户可以上传自己的 .class 文件,然后将其本地保存到特定文件夹,路径保存在数据库中
- 通过 GUI 用户可以选择在代码运行时使用该文件
- 我的代码应该在代码运行时通过这个给定的绝对路径加载一个类
问题在于第三点,因为我不知道是否可以在代码运行时加载类。
我尝试使用 URLClassLoader,但遇到 ClassNotFound 错误。
编辑:
基本上,我有这个静态函数,它应该按其名称返回 Class,但 urlClassLoader.loadClass() 会抛出错误。
文件的名称是 J48.class,因此对于 className 参数,我尝试使用“J48”、“J48.class”,但没有任何效果。
此外,我尝试设置文件夹分类器来构建路径并将参数设置为“weka.classifiers.trees.J48”,这是该类的包的完整路径(包结构是 weka.classifiers.trees)。
`public static Class getClassByName(String className) throws MalformedURLException, ClassNotFoundException
{
URLClassLoader urlClassLoader = URLClassLoader.newInstance(new URL[] {
new URL("file:///D:\\xampp\\htdocs\\prog-ing\\classifiers\\")
});
Class class = urlClassLoader.loadClass(className);
return class;
}`
【问题讨论】:
-
“我尝试过使用 URLClassLoader,但出现 ClassNotFound 错误。” - 将您的代码发布为minimal reproducible example,以便人们可以帮助您。
-
我添加了负责类加载的函数。我尝试更改 URL(/ 和 \)并将类名从“J48”更改为“J48.class”。
-
你要加载的类的包结构是什么?
-
我是
classifiers.J48,你需要将URL缩短一个路径元素,并将包名添加到类中。 -
试过了,但没用。我可以知道包名吗?因为目标是让用户上传任何类,然后将其保存到文件夹分类器中,我正在从该文件夹加载类。此文件夹(D:/xampp/htdocs/prog-ing/classifiers)不在构建路径中,不确定是否应该在,但我试图避免这种情况。
标签: java class classloader classnotfoundexception