Hallo,
im Anfängerforum konnte mir niemand helfen. Ich hoffe Ihr habt Ahnung.
Ich habe einen Client den ich wärend der Laufzeit updaten will. Dabei soll mir der Class Loder die neue Version aus dem Internet zurückgeben und anzeigen.
Leider gibt er aber nur eine Instanz meiner lokalen Anwendung zurück. Ich weis aber nicht wieso. ???:L
Der Code der das Update startet (wird gleich nach initComponents(); ausgeführt):
Der Class Loader:
Ein Problem wegen Zugriffsrechten o.ä. tritt nicht auf, da es mit einer lokalen Pfadangabe auch nicht funzt. Exceptions gibts auch keine.
Die Ausgabe wenn ich bei der Frage auf ja klicke:
Ausgabe Console:
Chatclient gestartet!
file:///E:\Schule\Netzwerkprog\chatclientupdate2\build\classes\, chatclient
isLocalClass? false
ladeKlasse(): laden erfolgreich!
chatclient[frame0,256,201,511x366,invalid,hidden,layout=java.awt.BorderLayout,title=Chatclient 1.1 mit Updatefunktion © by Marfir,normal,defaultCloseOperation=EXIT_ON_CLOSE,rootPane=javax.swing.JRootPane[,0,0,0x0,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]
Ausgabe Textfeld (ausgabe):
Programm wird geupdatet. Bitte warten...
Das Programm ist erfolgreich aktualisiert wurden!
Wenn alles funktionieren würde, müsste bei chatclient[...title=Chatclient 1.2 oder 2.0 stehen ...]
Hat jemand ne Idee was ich falsch gemacht oder vergessen habe???
im Anfängerforum konnte mir niemand helfen. Ich hoffe Ihr habt Ahnung.
Ich habe einen Client den ich wärend der Laufzeit updaten will. Dabei soll mir der Class Loder die neue Version aus dem Internet zurückgeben und anzeigen.
Leider gibt er aber nur eine Instanz meiner lokalen Anwendung zurück. Ich weis aber nicht wieso. ???:L
Der Code der das Update startet (wird gleich nach initComponents(); ausgeführt):
Code:
//neue Version verfügbar
int n=0;
n=jOptionPane1.showConfirmDialog(this, "Es ist eine neue Version (" + versioninet + ") verfügbar! Wollen Sie Ihre Version jetzt updaten?");
if (n==jOptionPane1.YES_OPTION)
{
ausgabe.append("Programm wird geupdatet. Bitte warten...\n");
button1.setEnabled(false);
//speichern, dass update bereits durchgeführt wurde
BufferedWriter korrigiere = new BufferedWriter(new FileWriter("update.txt"));
korrigiere.write("on");
korrigiere.close();
//auslesen was geupdatet werden soll
URL url2 = new URL("http://www.marfir.de/schule/update.txt");
URLConnection verbindung2 = url2.openConnection();
BufferedReader bfr2 = new BufferedReader(new InputStreamReader(verbindung2.getInputStream()));
while ((zeile=bfr2.readLine()) != null)
{
//neue version laden
//Object o = ladeKlasse("http://www.marfir.de/schule/", zeile.trim());
Object o = ladeKlasse("file:///E:\\Schule\\Netzwerkprog\\chatclientupdate2\\build\\classes\\", "chatclient");
System.out.println(o.toString());
}
bfr2.close();
//fertig geupdatet
ausgabe.append("Das Programm wurde erfolgreich aktualisiert!\n");
button1.setEnabled(true);
}
Der Class Loader:
Code:
static Object ladeKlasse (String pfad, String klassenname) throws Exception
{
//klassen laden und neue instanz zurückgeben
System.out.println(pfad + ", " + klassenname);
URL url = new URL(pfad);
URLClassLoader cl = new URLClassLoader(new URL[]{url});
Class c = cl.loadClass(klassenname);
System.out.println("isLocalClass? " + c.isLocalClass());
System.out.println("ladeKlasse(): laden erfolgreich!");
ausgabe.append("Das Programm ist erfolgreich aktualisiert wurden!\n");
return c.newInstance();
}
Ein Problem wegen Zugriffsrechten o.ä. tritt nicht auf, da es mit einer lokalen Pfadangabe auch nicht funzt. Exceptions gibts auch keine.
Die Ausgabe wenn ich bei der Frage auf ja klicke:
Ausgabe Console:
Chatclient gestartet!
file:///E:\Schule\Netzwerkprog\chatclientupdate2\build\classes\, chatclient
isLocalClass? false
ladeKlasse(): laden erfolgreich!
chatclient[frame0,256,201,511x366,invalid,hidden,layout=java.awt.BorderLayout,title=Chatclient 1.1 mit Updatefunktion © by Marfir,normal,defaultCloseOperation=EXIT_ON_CLOSE,rootPane=javax.swing.JRootPane[,0,0,0x0,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]
Ausgabe Textfeld (ausgabe):
Programm wird geupdatet. Bitte warten...
Das Programm ist erfolgreich aktualisiert wurden!
Wenn alles funktionieren würde, müsste bei chatclient[...title=Chatclient 1.2 oder 2.0 stehen ...]
Hat jemand ne Idee was ich falsch gemacht oder vergessen habe???