Änderungen in der JAR speichern

BaqFish

Neues Mitglied
Nabend zusammen,

ich bin im Moment dabei ein kleines Programm zu schreiben. Nun habe ich das Projekt als JAR exportiert und es lässt sich auch ohne Probleme starten.
Jetzt habe ich allerdings das Problem, dass ich, wenn ich TextFields oder CheckBox' ändere, deren Wert beim schließen nicht gespeichert wird.
Da ich nicht genau wusste, nach was ich suchen sollte, erstelle ich ein eigenes Thema und hoffe auf eure Hilfe.


Mit freundlichem Gruß

BaqFish
 
T

troll

Gast
man kommt zwar auch während der runtime an einen stream des aktuellen JAR-files ran ... sinnvoller ist aber eine config-datei daneben

Java:
File dir=new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getParentFile();

liefert dir ein File-objekt auf das aktuelle verzeichnis in dem die JAR liegt ...

dann kannst du mit

Java:
File config=new File(dir, "config.properties");

ein File-objekt auf deine config-datei holen und darin mit Properties (standard-format für java) deine daten speichern ... laden funktioniert analog

wenns nur ein kleines projekt ist kann man auch eine klasse nehmen und in deren variablen alles speichern und dann serialisieren ... ist aber für große projekte und long-time unbrauchbar
 
G

Gastredner

Gast
man kommt zwar auch während der runtime an einen stream des aktuellen JAR-files ran ... sinnvoller ist aber eine config-datei daneben

Java:
File dir=new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getParentFile();
Ich würde die Konfigurationsdateien nicht bei der Executable speichern - unter Umständen liegt diese an einem Ort, wo der Nutzer keine Schreibrechte hat, was das Speichern erfahrungsgemäß dann eher schwierig gestaltet. ;)
Besser ist es, den Benutzerordner dazu zu verwenden:
Java:
String userFolder = System.getProperty("user.home");
File saveFile = new File(userFolder, ".yourapp/config.cfg");
Damit erzeugst du im Benutzerordner einen Ordner namens ".yourapp" (der Punkt, damit dieser unter unixoiden Systemen nicht direkt sichtbar ist), der eine Datei "config.cfg" enthält, in die du deine Daten schreiben kannst. Wenn du den Ordner deines Nutzers unter Windows nicht sinnlos "zumüllen" möchtest, kannst du auch erst testen, ob dein Programm unter Windows läuft und dir im Falle einer positiven Antwort den Wert der Systemvariable APPDATA besorgen, die den Pfad zu dem Ordner enthält, den Windows zum Speichern von Applikationsdaten vorsieht.
 

BaqFish

Neues Mitglied
Danke schonmal für die Hilfe. Ich bin jetzt soweit, dass ich folgenden Code habe:

Java:
public class Testi extends javax.swing.JFrame implements java.io.Serializable {

    public static Testi getJFrame() {
        ObjectInputStream o;
        try {
            o = new ObjectInputStream(new FileInputStream("C:/Users/****/Documents/NetBeansProjects/Testi/dist/"));
            Testi myFrame = (Testi) o.readObject();
            return myFrame;
        } catch (IOException | ClassNotFoundException e) {

            Testi my = new Testi();
            serialize(my);
            return my;
        }
    }

    public static void serialize(Testi myFrame) {
        try {
            File f = new File("C:/Users/****/Documents/NetBeansProjects/Testi/dist/testi.bn");
            try (ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("C:/Users/****/Documents/NetBeansProjects/Testi/dist/", true))) {
                o.writeObject(myFrame);
            }
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null,
                    "Fehler beim anlegen der Konfigurationsdatei!", "Fehler",
                    JOptionPane.ERROR_MESSAGE);
        }
    }


Es wird eine nun durch Testi.getJFrame(); eine Datei erstellt, dennoch erscheint die Fehlermeldung die im unteren Exception Block abgefangen wird. Laut Debugger handelt es sich um eine NotSerializableException.

Ich hoffe ihr könnt mir erneut helfen.
 

kaetzacoatl

Bekanntes Mitglied
1. Prüfe ob dein Frame nicht serialisierbare Felder enthält und mache diese transient.
2. Füge eine id eine [JAPI]java.io.Serializable[/JAPI]
3. wtf?
Code:
try (ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("C:/Users/****/Documents/NetBeansProjects/Testi/dist/", true))) {
sowas hab ich noch nie gesehen,
geht das?
 
7

789456123

Gast
Ich würde die Konfigurationsdateien nicht bei der Executable speichern - unter Umständen liegt diese an einem Ort, wo der Nutzer keine Schreibrechte hat, was das Speichern erfahrungsgemäß dann eher schwierig gestaltet. ;)
Besser ist es, den Benutzerordner dazu zu verwenden:
Java:
String userFolder = System.getProperty("user.home");
File saveFile = new File(userFolder, ".yourapp/config.cfg");
Damit erzeugst du im Benutzerordner einen Ordner namens ".yourapp" (der Punkt, damit dieser unter unixoiden Systemen nicht direkt sichtbar ist), der eine Datei "config.cfg" enthält, in die du deine Daten schreiben kannst. Wenn du den Ordner deines Nutzers unter Windows nicht sinnlos "zumüllen" möchtest, kannst du auch erst testen, ob dein Programm unter Windows läuft und dir im Falle einer positiven Antwort den Wert der Systemvariable APPDATA besorgen, die den Pfad zu dem Ordner enthält, den Windows zum Speichern von Applikationsdaten vorsieht.

ist mir bewusst ... jedoch gehe ich davon aus (oder besser prüfe es direkt in meiner software) dass das jar bereits innerhalb von user.home liegt und somit rechte vorhanden sind ...
wird festgestellt dass das jar außerhalb user.home ist wird es dort hin kopiert (in einen seperaten unterordner) und von dort aus noch mal neu gestartet sowie die aktuelle VM terminiert ...

3. wtf?
Code:
try (ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("C:/Users/****/Documents/NetBeansProjects/Testi/dist/", true))) {
sowas hab ich noch nie gesehen,
geht das?

das nennt sich try-with-resources und macht im zusammenhang mit AutoCloseable sinn
beides gibt es ab Java7 sowie den fakt das Closeable nun auch von AutoCloseable erbt, genau wie viele Channel klassen
der sinn dahinter ist das man sich nun nicht mehr explizit in einem finally-block um das closen kümmern muss ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Input/Output Nur Änderungen speichern Java Basics - Anfänger-Themen 21
O Änderungen innerhalb for-Schleife speichern Java Basics - Anfänger-Themen 17
AGW App programmiert lassen, aber Änderungen vornehmen Java Basics - Anfänger-Themen 13
K Objekt soll Anwendung über Änderungen informieren Java Basics - Anfänger-Themen 8
T Compiler-Fehler Eclipse reagiert nicht mehr auf Änderungen im Code Java Basics - Anfänger-Themen 2
W Änderungen bemerken Java Basics - Anfänger-Themen 10
G Änderungen in TextFelder feststellen Java Basics - Anfänger-Themen 4
D Änderungen im Frame werden zu spät durchgeführt Java Basics - Anfänger-Themen 5
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
I Passwort in Datenbank speichern um später wieder auszulesen Java Basics - Anfänger-Themen 5
S mehrere TreeSets so speichern, dass man sie miteinander vergleichen kann Java Basics - Anfänger-Themen 1
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
berserkerdq2 Wie datum im default format speichern? Java Basics - Anfänger-Themen 5
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
f3mys Objektwerte in Liste speichern und wieder abrufen Java Basics - Anfänger-Themen 23
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
U Wie ein Attribut von einer Klassenmethode in der Klasse speichern= Java Basics - Anfänger-Themen 2
B Screenshots machen und zwar viele und speichern Java Basics - Anfänger-Themen 12
C XML Datei speichern und laden Java Basics - Anfänger-Themen 18
Marlena Bauer Konsolenausgabe in .txt speichern Java Basics - Anfänger-Themen 6
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
ansystin Teilerfremde Zahlen ausgeben + Zahlenausgabe speichern Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
C File speichern Java Basics - Anfänger-Themen 5
D String und char in String speichern Java Basics - Anfänger-Themen 5
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
I Werte (u.a. Geldbeträge) in Datenbank speichern und Rundungen? Java Basics - Anfänger-Themen 8
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
GermanPie Nachrichten Speichern Java Basics - Anfänger-Themen 2
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
C Wo Defaultpfad speichern? Java Basics - Anfänger-Themen 2
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
Dimax stream in string[] speichern Java Basics - Anfänger-Themen 6
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
D Input/Output Input von zwei Koordinaten validieren und anschließend Werte speichern Java Basics - Anfänger-Themen 7
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
H Objekt im Array speichern Java Basics - Anfänger-Themen 2
H Objekt als Attribut speichern Java Basics - Anfänger-Themen 11
B Text-Datei nur in Stream speichern und dann ausgeben Java Basics - Anfänger-Themen 3
M JTextField in ArrayList speichern Java Basics - Anfänger-Themen 4
L Nur Bestimmte Werte aus einem Array in ein anderes Speichern Java Basics - Anfänger-Themen 11
S Zweidimensionales Array in ein eindimensionales Array speichern Java Basics - Anfänger-Themen 6
A Wie zwei zahlen in einer Variable speichern? Java Basics - Anfänger-Themen 7
C ResultSet in Array speichern Java Basics - Anfänger-Themen 5
S Byte-Array kann chars speichern? Java Basics - Anfänger-Themen 3
J Kann man files in einer Klasse speichern. Java Basics - Anfänger-Themen 2
B Infos zu Attribute in einer Klasse speichern Java Basics - Anfänger-Themen 3
M Input/Output JTextField Eingabe in String Variable speichern Java Basics - Anfänger-Themen 15
A Kann man eine Methode als Variable speichern und danach noch verändern? Java Basics - Anfänger-Themen 6
D Werte aus einem BinärBaum in einem Array speichern Java Basics - Anfänger-Themen 1
I Datei in Programm speichern Java Basics - Anfänger-Themen 3
A .txt-Datei mit Java speichern Java Basics - Anfänger-Themen 2
M Speichern unter. Java Basics - Anfänger-Themen 11
S Java Daten in Excel speichern Java Basics - Anfänger-Themen 1
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
L Kommandozeileneinträge in Array speichern Java Basics - Anfänger-Themen 4
B HTML Code in XML speichern Java Basics - Anfänger-Themen 3
G Benutzereingaben durch Zeilenumbruch trennen und in Array individueller Größe speichern Java Basics - Anfänger-Themen 20
G JTextField per Button speichern und an andere Klasse übergeben Java Basics - Anfänger-Themen 2
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
N Best Practice Rückgabe eines Terminal Befehls in eine Variable speichern Java Basics - Anfänger-Themen 27
B XML in DB speichern -> Regelkonzept Java Basics - Anfänger-Themen 2
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
void19 Methoden Binärbaum Inorder Traversierung in Array speichern Java Basics - Anfänger-Themen 1
X TextField-Inhalt mit Button in .txt-Datei speichern Java Basics - Anfänger-Themen 16
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
J Geld speichern und wieder auslesen Java Basics - Anfänger-Themen 10
K Geburtsdaten von Mehreren Personen speichern und Alter ausgeben Java Basics - Anfänger-Themen 11
F Beste Datenstruktur zum Speichern? Java Basics - Anfänger-Themen 1
Dimax Programme ,als Text in MySql speichern Java Basics - Anfänger-Themen 7
C Erste Schritte ArrayIndexOutOfBoundsException beim Speichern im Array Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben