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 kann 😉

    Das 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.

    @JBeni:

    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 :|) ?



  • 💡


Anmelden zum Antworten