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;
        }
    }
}

ご覧のとおり、私は2つの方法を試しましたが、最初の方法は現在コメント中です。私がしていることは、フォルダ内のすべてのファイルをチェックし、それが.classファイルであるかどうかをチェックすることです。そうであれば、クラスがある場合はそれをロードしようとします。2つclassLoadersは「知っている」ファイルしかロードできないと思いますが、外部クラスをロードするにはどうすればよいでしょうか。

4

1 に答える 1

3

通常、新しいクラスローダーが必要です。を使用しjava.net.URLClassLoader.newInstanceます。ただし、注意してください。現在、外部からアプリケーションにクラスをロードしています。

(一部のクラスローダーでは場所を追加できますが、それは本当のハックです。)

于 2013-01-25T17:04:27.520 に答える