Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Also ich habe eine Update-Funktion, und möchte sozusagen die "alte" .jar Datei löschen.
Deswegen brauche ich den namen der gerade geöffneten .jar Datei.
Soviel ich weiss ist das nicht ganz einfach zu lösen, da du dann ja den Pfad zur gerade geöffneten jar-Datei brauchst. Ich habe auch schon nach Möglichkeiten gesucht, eine Konfigurationsdatei im gleichen Ordner wie die jar-Datei zu speichern, aber ohne Erfolg. hier der link
Das Problem ist, dass das Java-Arbeitsverzeichnis davon abhängt wie du die jar-Datei aufrufst. Wenn du in der Konsole in den Ordner navigierst und dann per java -jar Datei.jar hast du den Pfad, aber wenn du in irgend nem anderen Ordner bist und dann per java -jar /pfad/zum/jar/ordner/Datei.jar die jar-Datei aufrufst hast du den Ordner wo du dich gerade befindest als Arbeitsverzeichnis.
Aber das mit dem Updaten ist gerade eine Interessante frage, da ich mir eine Update-Klasse welche per FTP und HTTP aktualisieren kann programmiert habe. Ist die jar im Programmverzeichnis kann sie ja nur durch einen Admin verändert werden. Wie aktualisieren sich dann Programme normalerweise? Haben die alle zu aktualisierenden Dateien im Einstellungs-Verzeichnis?
Ja also die alte .jar Datei sucht die Updates und lädt sie herunter.
Inzwischen wird eine neue .jar Datei im selbem verzeichnis angelegt in der dann der Download hineingespeichert wird.
Jetzt möchte ich es den Benutzern komfortabler machen, mit einer Funktion, die alte .jar Datei zu löschen.
Ja also die alte .jar Datei sucht die Updates und lädt sie herunter.
Inzwischen wird eine neue .jar Datei im selbem verzeichnis angelegt in der dann der Download hineingespeichert wird.
Jetzt möchte ich es den Benutzern komfortabler machen, mit einer Funktion, die alte .jar Datei zu löschen.
Du kannst auch einfach die alte jar-Datei direkt beim herunterladen überschreiben, so hab ichs glaube ich auch schon gemacht. Dann wird beim nächsten Start einfach die neue verwendet.
Du kannst auch einfach die alte jar-Datei direkt beim herunterladen überschreiben, so hab ichs glaube ich auch schon gemacht. Dann wird beim nächsten Start einfach die neue verwendet.
Das geht auch unter Windows? Und wenn das Programm weiterläuft und "alte" Ressourcen aus dem JAR geladen werden sollen? Und wenn der Download unterbrochen wird oder anderweitig schief geht, ist dann die Installation hinüber?
File jar = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation()
.getPath());
String jarpath = jar.getAbsoluteFile().toString();
Das geht auch unter Windows? Und wenn das Programm weiterläuft und "alte" Ressourcen aus dem JAR geladen werden sollen? Und wenn der Download unterbrochen wird oder anderweitig schief geht, ist dann die Installation hinüber?
Ja scheint als hast du recht, habs gerade versucht. In Windows gehts nicht, in Ubuntu schon ^^ Aber was genau passiert, ob das gesamte jar beim start geladen wird weiss ich nicht...
Und nun zu den gegebenen Beispielen:
Ich kann zu 99% sagen dass alle den Arbeitspfad von Java zurückgeben, und nicht den tatsächlichen Pfad der jar-Datei! In Windows ist das schon der Pfad zur jar-Datei wenn auf die Datei doppelgeklickt wird, aber in Ubuntu ist es das home-Verzeichnis des Benutzers und je nachdem wie die jar-Datei in der Konsole (egal welches Betriebssystem) gestartet wird, ist der Arbeitspfad anders. Du musst den Pfad also irgendwo gespeichert haben.
Du kannst natürlich auch einen Starter installieren (zum beispiel Web Start) oder was eigenes was dann die jar-Datei aus einem bestimmten Verzeichnis (zum Beispiel dort wo Programmdaten liegen, App Data in Windows oder home in Ubuntu) startet. Somit kommst du mit etwas wie