Java - Dynamisches Laden von Klassen

8

Ich erstelle gerade ein Plugin-System (Mein erster Versuch), schaue anderen Code an Ich versuche meinen eigenen Classloader zusammenzusetzen und die Plugins aus einem Verzeichnis zu laden (Dies sind Klassen-Dateien)

Mein Problem ist, dass jedes Mal, wenn ich versuche, die Klasse mit meinem Classloader zu laden, alle Importe im Plugin, die auf das Programm verweisen, vom Klassenlader nicht gefunden werden. (zB: MyClass erweitert Plugin, com.mgmc.plugins noclassdeffound) Anderer Namespace?

Einige Beispielcodes: Classloader:

%Vor%

Das Plugin, das ich lade: (Die Anmerkung wird auch nicht gefunden)

%Vor%

Wie rufe ich die Klasse auf, um geladen zu werden:

%Vor%

Ich denke, das ist trivial für diejenigen, die wissen, was sie tun!

    
Thomas Nairn 19.10.2012, 16:08
quelle

2 Antworten

4

ENDLICH! Nach anderthalb Tagen der Suche wies mich Vulcan in die richtige Richtung: Ich habe den GameClassLoader zu:

geändert %Vor%

und schließlich die Basis-URL zum getResourceAsStream ()

hinzugefügt %Vor%

Vielen Dank für Ihre Hilfe Jungs!

    
Thomas Nairn 19.10.2012, 17:00
quelle
0

Versuchen Sie, dem Ressourcenpfad einen führenden Schrägstrich hinzuzufügen: final InputStream in = getResourceAsStream("/" + name.replace('.', '/') + ".class");

Dies ist die Sache, die ich jedes Mal versuchen muss, wenn ich getResourceAsStream() aufruft. Ich habe das gerade wieder für dich ausprobiert. Der Pfad hier ist relativ zum Paket der Klasse, die zum Aufrufen von getResourceAsStream() verwendet wird. Daher wird ein führender Schrägstrich benötigt, um "start from root" zu sagen.

    
AlexR 19.10.2012 16:38
quelle