web-dev-qa-db-ja.com

動的にロードするメソッドJavaクラスファイル

Jarにコンパイルされたプログラムがディレクトリ内のすべてのクラスファイルを読み取って使用できるように、Javaクラスファイルを動的にロードする良い方法は何でしょうか。 jarに関連して必要なパッケージ名を持っているということですか?

41
MirroredFate

私はそれがClassLoaderだと信じています。

クラスパス上にないクラスファイルをロードする以下の例を見ることから始めることをお勧めします。

// Create a File object on the root of the directory containing the class file
File file = new File("c:\\myclasses\\");

try {
    // Convert File to a URL
    URL url = file.toURI().toURL();          // file:/c:/myclasses/
    URL[] urls = new URL[]{url};

    // Create a new class loader with the directory
    ClassLoader cl = new URLClassLoader(urls);

    // Load in the class; MyClass.class should be located in
    // the directory file:/c:/myclasses/com/mycompany
    Class cls = cl.loadClass("com.mycompany.MyClass");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
}
86
aioobe
MyClass obj = (MyClass) ClassLoader.getSystemClassLoader().loadClass("test.MyClass").newInstance();
obj.testmethod();

または

MyClass obj = (MyClass) Class.forName("test.MyClass").newInstance();
obj.testmethod();
8
d2k2

クラスパスにディレクトリを追加する場合、アプリケーションの起動後にクラスを追加できます。これらのクラスは、ディレクトリに書き込まれるとすぐにロードできます。

1
Peter Lawrey