私は2つのクラスがあります:MainClaz
でJavaのクラスパスに追加された新しいJarから自動的にクラスを読み込む方法は?
MainClaz
MyTest2
、
public class MainClaz {
public static void main(String[] args) throws InterruptedException {
while (true) {
try {
Class aClass = Class.forName("com.test.MyTest2");
Object t = aClass.newInstance();
} catch (Exception e) {
System.out.println("Exception For MyTest2 ");
}
Thread.sleep(10000);
try {
Class aClass = Class.forName("com.test.MyTest3");
Object t = aClass.newInstance();
} catch (Exception e) {
System.out.println("Exception For MyTest3 ");
e.printStackTrace();
}
}
}
}
私は瓶(ジャー1)の両方のクラスをパッケージ化し、それを入れているがクラスパス
MyTest3
はこれには存在しないため、ClassNotFoundException
を投げつけ続けます。
今言うことができます...クラスMyTest3
を含む新しいjar(Jar 2)を作成し、このjarをクラスパスFolderにコピーします。
私はクラス内の別の新しい瓶にMyTest3
クラスを入れているので、それをクラスパスにMyTest3
を見つける必要がありますが、それはClassNotFoundException
を投げている、病棟に。
これを動作させるにはどうすればよいですか?
要件に詳細を追加:今クラス名のよう
は、ハードコーディングされています。しかし、それらは外部ソースから読み込まれます(いくつかのデータベースを考えてみましょう)。しかし、クラスパスの新しいjarに新しいクラスを追加し、クラス内のクラスの完全修飾名を追加して、ループプログラムの次の反復で動的にクラスをロードできるようにしたい。 MyTest3
のインポートを追加
あなたは動的で、すでにロードしたクラスローダ(デフォルトのクラスローダー)のクラスパスを変更することはできません少なくとも私は方法を知らない。デフォルトを置き換えるには、JVMを再起動する必要があります。ただし、クラスローダーの新しいインスタンスを作成し、新しいクラスローダーに新しいクラス定義をロードしてから、そのクラスローダーを使用して新しいクラスローダーを使用して、要件を詳述してください。 – SGM1