Klassen dynamisch laden.
-
Hi,
wie schaff ich es denn eine Klasse zu laden die nicht im gleichen verzeichnis liegt wie das programm.
Das ganze muss natürlich dynamisch während der Laufzeit geschehen.
Mfg JJ
-
Da sage ich mal, schau dir die Java Reflection API an.
Die macht genau dieses dynamische Laden zur Laufzeit.
-
Ok, sieht realtiv gut aus.
Problem ist jedoch, dass ich nur Klassen laden kann die im gleichen source verzeichnis liegen.
wenn ich zb. c:\plugins\p1.class laden will funktioniert es wiederum nicht.Class plugInClass; Constructor plugInConstructor; PluginInterface plugIn; // Class-Objekt der Plug-In-Klasse ermitteln plugInClass = Class.forName(className); // Es wird ein Konstruktor mit einem Properties-Parameter gesucht Class[] paramTypes = new Class[]{java.util.Properties.class}; Object[] paramValues; //Konstruktor ermitteln plugInConstructor = plugInClass.getConstructor(paramTypes); // Zusammenbauen des Parameter-Arrays... paramValues = new Object[] {settings}; // ... und Aufruf des Konstruktors plugIn = (PluginInterface)plugInConstructor.newInstance(paramValues); return plugIn;
Wie kann ich das problem lösen?
-
Ist es überhaupt möglich Klassen in einem unterverzeichnis oder eines komplett anderen Verzeichnis zu laden?
-
JayJay schrieb:
Ist es überhaupt möglich Klassen in einem unterverzeichnis oder eines komplett anderen Verzeichnis zu laden?
Eigentlich ist es egal wo die zu ladende Klasse liegt, man muss halt nur den richtigen Pfad angeben.
P.S. Probiers mal mit dem ClassLoader().load(Class c);
-
Du kannst Klassen laden voher auch immer du willst.
Allerdings benötigst du eine neue Instanz eines ClassLoader. Der URLClassLoader ist ein Kandidat der so manche *.class-Datei laden kannDas einzige Problemchen: bei mehreren ClassLoadern kann es immernoch passieren, dass die Klassen einander nicht kennen, weil sie nicht "um die Ecke" schauen können (zwar sind A und B geladen, aber da sie sehen sich trotzdem nicht, weil die beiden ClassLoader von A und B nichts miteinander zu tun haben).
Manchmal gehts auch einfacher, und man kann den Class-Path des Programmes ändern (dazu findest du gaaaanz viel im Netz).
-
Das will einfach nicht funktionieren.
Benutzt WinXP und die standard konfigurationen von JSDK.Die Klassem im selben Ordner kann ich ohne Probleme laden. Problem tritt dann auf wenn sich die Klasse NICHT mehr im gleichen Ordner befindet.
wie kann ich meinem URLClassLoader objekt mitteilen, dass ich die Klasse von einem Verzeichnis laden will. (ich muss ja ein URL-array als parameter übergeben :|) ?
-