Динамическая внешняя загрузка классов

Я пытаюсь получить опыт динамической загрузки классов в 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 могу загружать только те файлы, которые они "знают", так как я могу загрузить внешний класс.

1 ответ

Решение

Как правило, вам нужен новый загрузчик классов. использование java.net.URLClassLoader.newInstance, Осторожно, теперь вы загружаете классы извне в ваше приложение.

(Некоторые загрузчики классов позволят вам добавлять местоположения, но это настоящий взлом.)

Другие вопросы по тегам