0

我试图在 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只能加载他们“知道”的文件,那我怎么能加载一个外部类。

4

1 回答 1

3

您通常需要一个新的类加载器。使用java.net.URLClassLoader.newInstance. 不过要小心,您现在正在将类从外部加载到您的应用程序中。

(一些类加载器将允许您添加位置,但这是一个真正的 hack。)

于 2013-01-25T17:04:27.520 回答