geänderte Klassen nachladen, ohne JVM neu zu starten

blaiso

Grünschnabel
Hallo zusammen,

ich habe folgendes Problem:
ich starte eine Java-GUI und wähle mehrere .java-Dateien aus, deren Inhalt ich um einige Informationen erweitere; ich schreibe also neue Zeilen in die .java-Dateien hinein.

Anschließend will ich diese jetzt „infizierten“ .java-Dateien ausführen.
Dazu brauche ich das Class-Objekt zu diesen .java-Dateien. An sich kein Problem, denn ich weiß ja, wo diese „infizierten“ Java-Dateien liegen.

Das Problem ist aber, dass ich beim Erzeugen der Class-Objekte zu diesen .java-Dateien nur das „alte“ Class-Objekt der .java-Dateien bekomme, also das Class-Objekt zu dem Zeitpunkt, als ich meine GUI gestartet habe und die Dateien noch nicht infiziert waren..
Ich verwende dabei einen ClassLoader, der die zu suchende Klasse neu lädt (loadClass (String name, boolean resolve) mit resolve = true). Trotzdem wird nur die alte Version der Klasse gefunden.

Wie kann ich an das aktuelle Class-Objekt kommen, also an das Class-Objekt der bereits infizierten Dateien?
Wenn ich zwischen dem Infizieren der Dateien und dem Ausführen die Anwendung neu starte, habe ich die aktuellen Class-Objekte. Dass liegt wohl daran, dass die Java Virtual Machine neu gestartet wird (dass will ich aber unbedingt vermeiden, weil es nicht sehr elegant ist)


Wer kann bei diesem Problem helfen
 
Hallo!

Ich denke, um mit deinem "speziellen" ClassLoader die neuen Klassen laden zu koennen, musst du deinen ClassLoader wegwerfen und einen neuen bauen. Ueber diesen solltest du dann die neuen Klassen laden koennen.... u.U. musst du die neu erzeugten Klassen noch dynamisch in den ClassPath mit aufnehmen... (einfach addURL Methode des ClassLoaders per Reflection zugaenglich machen und aufrufen...

Gruss Tom
 
Zurück