我试图获得Java中动态类加载的经验。所以欢迎任何评论和帮助。我有一个程序,允许用户选择一个文件并对其执行一些操作。操作是“命令”,这些是我尝试加载的类。
它的工作方式是:用户将.class文件放入所需的文件夹,我的程序检查文件夹中的文件,如果.class文件中有类,则加载它。
我做到了,但不是我想要的。目前,它仅适用于使用我的程序编译的类。但我想要的是我可以把任何包含类的.class文件放在文件夹中,我的程序加载它。那是我现在的代码:
for (int i = 0; i < fileList.length; i++) {
if (fileList[i].endsWith(".class")) {
/////MY FIRT TRY/////ClassLoader myClassLoader = ClassLoader.getSystemClassLoader();
ClassLoader classLoader = FileMod.class.getClassLoader();
// Define a class to be loaded.
String classNameToBeLoaded = fileList[i].replace(".class", "");
// Load the class
try {
/////MY FIRST TRY/////Class myClass = myClassLoader.loadClass(classNameToBeLoaded);
//if the class exists in the file
Class aClass = classLoader.loadClass(classNameToBeLoaded);
classList.add(aClass);
System.out.println("CLASS FOUND : " + classNameToBeLoaded + aClass.getSuperclass());
} catch (ClassNotFoundException e) {
System.out.println("CLASS NOT FOUND : " + classNameToBeLoaded);
continue;
}
}
}
正如您所看到的,我尝试过两种方式,第一种方式目前正在评论中。我所做的是检查文件夹中的每个文件,并检查它是否是.class文件,如果是,我尝试加载该类,如果有的话。我猜两个classLoaders
只能加载他们“知道”的文件,所以如何加载外部类。
答案 0 :(得分:2)
您通常需要一个新的类加载器。使用java.net.URLClassLoader.newInstance
。但是要小心,您现在正在从外部将类加载到您的应用程序中。
(某些类加载器会允许您添加位置,但这是真正的黑客攻击。)