3

我在 Java 中的类加载有一些问题。在我的项目中,我试图从任何地方动态加载一个类。但是,我目前无法加载硬编码的文件,并且经过 6 小时的谷歌搜索和堆栈溢出检查后仍然一无所知。

我怀疑我正在加载的类的包名有问题。我的目标是在project/resources/dynamicFolderNonInClassPath/loadThis目录中加载 Class LoadAClass.java 。由于我将我的 URLClassLoader 设置为上面的文件夹,因此它的包已设置为

package loadThis;

public class LoadAClass{
static{
System.out.println("I am loaded");
}

(...)
}

但是我不断收到一个类未找到异常。

File file = new File("C:/Users/Robert/Documents/workspace/project/resources/dynamicFolderNonInClassPath/");
if (!file.exists()) System.out.println("typo!"); //debug print
URL url = file.toURI().toURL();
URLClassLoader loader = new URLClassLoader(new URL[]{url});
String classToBeLoaded = "loadThis.LoadAClass";

Class classy = loader.loadClass(classToBeLoaded);
System.out.println(classy.getCanonicalName()); //debug print

我尝试了不同的组合,例如直接将 URLClassLoader 设置为文件或将完整的/resources/dynamicFolderNonInClassPath/loadThis作为 URL 但到目前为止没有成功。

有圣诞气氛的人看到问题了吗?我对这个功能似乎有一些误解,我希望看到它得到修复。

4

2 回答 2

1

.java 文件不是类文件。你编译过吗?您需要在“loadThis”目录中创建一个 LoadAClass.class 文件,并且您的类加载器指向包含“loadThis”的目录。

于 2012-12-21T22:58:48.350 回答
1

您缺少正斜杠“/”

File file = new File("C:/Users/Robert/Documents/workspace/project/resources/dynamicFolderNonInClassPath");
if (!file.exists()) System.out.println("typo!"); //debug print
URL url = new URL("C:/Users/Robert/Documents/workspace/project/resources/dynamicFolderNonInClassPath/");
URLClassLoader loader = new URLClassLoader(new URL[]{url});
String classToBeLoaded = "loadThis.LoadAClass";

Class classy = loader.loadClass(classToBeLoaded);
System.out.println(classy.getCanonicalName()); //debug print

见第三行

于 2012-12-21T23:00:33.637 回答