Das Konzept von Plugins

Ich habe etwas ähnliches ausprobiert und mit diesem Code eine Klasse geladen:
Java:
URL url = jarFile.toURI().toURL();
URLClassLoader classLoader = new URLClassLoader(new URL[]{url});
Class<?> loadedClass = classLoader.loadClass(className);
Plugin plugin = (Plugin)loadedClass.newInstance();
Danach lässt sich das jarFile aber nicht mehr löschen. Wie kann ich die Schreibrechte darauf wieder erlauben?
(Wenn ich die letzten beiden Zeilen weglasse, funktioniert das Löschen)
 
Das Problem wird wohl sein, dass die Klasse aus dem Jar wegen des loadClass Aufrufs noch geladen ist.
Warum willst du denn das JAR zur Laufzeit löschen? Ich weiß nicht, ob es eine Möglichkeit zum "Entladen" einer Klasse gibt. Wenn du den Default-ClassLoader genommen hast, müsste dieser IMHO doch bis zur Terminierung der JVM erhalten bleiben. D.h., du müsstest die geladenen Klassen wieder rauswerfen, sonst geht das vermutlich nicht...
Würde mich auf jeden Fall auch interessieren, wenn du eine Lösung gefunden hast.

Gruß
miffi
 
Danke für die schnellen Antworten. ;)
Anscheinend kann man einmal geladene Klassen nie mehr entladen.
An deleteOnExit() hab ich auch schon gedacht, es funktioniert aber widererwartend nicht. :(

Ich wollte das jar-File nur temporär aus einer eigenen Plugin-Datei entpacken und so schnell wie möglich wieder löschen.
Ich speichere jetzt aber alle Plugins in einem extra Ordner, in dem sie bleiben können. ;)
 
Zurück