从任意位置加载自定义类

时间:2012-12-21 22:52:36

标签: java dynamic classloader urlclassloader classnotfound

我在使用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,但到目前为止还没有成功。

有人在圣诞节的心情和看到问题吗?我似乎对这个功能有一些误解,我希望看到它修复。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

见第三行