wake-up-neo.com

Methode zum dynamischen Laden von Java Klassendateien

Was wäre eine gute Möglichkeit, Java class files) dynamisch zu laden, damit ein in eine JAR kompiliertes Programm alle Klassendateien in einem Verzeichnis lesen und verwenden kann, und wie kann man die Dateien so schreiben? dass sie den notwendigen Paketnamen in Bezug auf das Glas haben?

41
MirroredFate

Ich glaube, es ist ein ClassLoader, hinter dem Sie her sind.

Ich schlage vor, Sie beginnen mit dem folgenden Beispiel, in dem Klassendateien geladen werden, die sich nicht im Klassenpfad befinden.

// 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();

oder

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

Wenn Sie Ihrem Klassenpfad ein Verzeichnis hinzufügen, können Sie nach dem Start der Anwendung Klassen hinzufügen. Diese Klassen können geladen werden, sobald sie in das Verzeichnis geschrieben wurden.

1
Peter Lawrey