Hallo zusammen,
ich hätte da mal ne Frage bezüglich später eingebundener JAR-Dateien.
Nun habe ich die Jar-Datei samt ihrer Klassen in meinem CP und kann die Klassen auch Instanceieren. Nun mein Problem, zur Laufzeit des Programms möchte ich gerne, eine neuere Version der der JAR-Datei einbinden. Das heist ich lösche alle Instancen der Klassen die aus der alte JAR-Datei sind. Danach möchte ich Gleichnamige Klassen aus der neuen JAR-Datei erstellen nur das geht nicht.
Kann mir da jemand Helfen oder geht das überhaupt was ich vor habe?
mfg vrcat
ich hätte da mal ne Frage bezüglich später eingebundener JAR-Dateien.
Code:
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
public class JarLoadExample {
public static void main(String[] args) throws Exception {
// ClassLoder hollen und einzubindende jar bestimmen ----------
ClassLoader clL = JarLoadExample.class.getClassLoader();
File tmpLib = new File("desktop.jar");
// Hinzufügen des externen Jar File's zum Classpath -----------
Method m;
m = URLClassLoader.class.getDeclaredMethod("addURL",
new Class[] {URL.class});
m.setAccessible(true);
m.invoke(clL, new Object[] { tmpLib.toURL() });
// Klasse erstellen -------------------------------------------
String classname = "desktop.MainDesktop";
// Neue Instance der Klasse erzeugen --------------------------
Class cl = Class.forName(classname);
Object obj = cl.newInstance();
}
}
Nun habe ich die Jar-Datei samt ihrer Klassen in meinem CP und kann die Klassen auch Instanceieren. Nun mein Problem, zur Laufzeit des Programms möchte ich gerne, eine neuere Version der der JAR-Datei einbinden. Das heist ich lösche alle Instancen der Klassen die aus der alte JAR-Datei sind. Danach möchte ich Gleichnamige Klassen aus der neuen JAR-Datei erstellen nur das geht nicht.
Code:
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
public class JarLoadExample {
public static void main(String[] args) throws Exception {
// ClassLoder hollen und einzubindende jar bestimmen ----------
ClassLoader clL = JarLoadExample.class.getClassLoader();
File tmpLib = new File("test.jar");
// Hinzufügen des externen Jar File's zum Classpath -----------
Method m;
m = URLClassLoader.class.getDeclaredMethod("addURL",
new Class[] {URL.class});
m.setAccessible(true);
m.invoke(clL, new Object[] { tmpLib.toURL() });
// Klasse erstellen -------------------------------------------
String classname = "test.Test";
// Neue Instance der Klasse erzeugen --------------------------
Class cl = Class.forName(classname);
Object obj = cl.newInstance();
obj = null;
System.gc();
// Aktuellere Version !
// Hinzufügen des externen Jar File's zum Classpath -----------
tmpLib = new File("TEST/test.jar");
m = URLClassLoader.class.getDeclaredMethod("addURL",
new Class[] {URL.class});
m.setAccessible(true);
m.invoke(clL, new Object[] { tmpLib.toURL() });
// Neue Instance der Klasse erzeugen --------------------------
cl = Class.forName(classname);
obj = cl.newInstance();
}
}
Kann mir da jemand Helfen oder geht das überhaupt was ich vor habe?
mfg vrcat