JTree speichern und wieder einlesen

grafsoft

Mitglied
Hallo,

ich möchte den vom Anwendet bearbeiteten jTree beim Schließen der Form speichern, in einer MySQL-Datenbank als BLOB abspeichern und beim neuerlichen Öffnen wieder einlesen.

Mein Fehler dürfte wohl hier liegen, beim Einlesen:

tree = (JTree) in.readObject();
...

treemodel = (DefaultTreeModel) in.readObject();
treemodel.reload();
tree.setModel(treemodel);

Was mache ich falsch?

Java:
    private void formWindowClosing(java.awt.event.WindowEvent evt) {                                   
        System.out.println ("Closing");
        DefaultTreeModel treemodel = (DefaultTreeModel) tree.getModel();
        try {
            FileOutputStream file = new FileOutputStream("tree.txt");
            ObjectOutputStream out = new ObjectOutputStream(file);
            out.writeObject(tree);
            file = new FileOutputStream("model.txt");
            out = new ObjectOutputStream(file);
            out.writeObject(treemodel);
            
            MySQLConn conn = new MySQLConn();
            String asql = "update blobs set ablob=? where akey=1";
            File fil = new File("tree.txt");
            FileInputStream fis = new FileInputStream(fil);
            PreparedStatement pstmt = conn.getconn().prepareStatement(asql);
            pstmt.setBinaryStream(1, fis, (int) fil.length());
            pstmt.executeUpdate();
            asql = "update blobs set ablob=? where akey=2";
            fil = new File("model.txt");
            fis = new FileInputStream(fil);
            pstmt = conn.getconn().prepareStatement(asql);
            pstmt.setBinaryStream(1, fis, (int) fil.length());
            pstmt.executeUpdate();
            
            
        } catch (Exception e) {
            e.printStackTrace();
                    
        }
    } 

 void loadtree() {
        MySQLConn conn = new MySQLConn();
        DefaultTreeModel treemodel = (DefaultTreeModel) tree.getModel();
        try {
            String asql = "SELECT LENGTH(ablob) FROM blobs where akey=1";
            int i = Integer.parseInt(conn.singleresult(asql));
            if (i > 40) {
                asql = "select ablob from blobs where akey=1";
                ResultSet rs = conn.getstat().executeQuery(asql);
                rs.next();
                File fil = new File("tree.txt");
                FileOutputStream output = new FileOutputStream(fil);
                InputStream input = rs.getBinaryStream("ablob");
                byte[] buffer = new byte[1024];
                while (input.read(buffer) > 0) {
                    output.write(buffer);
                }
                FileInputStream file= new FileInputStream("tree.txt");
                ObjectInputStream in = new ObjectInputStream(file);
                tree = (JTree) in.readObject();
                asql = "select ablob from blobs where akey=2";
                rs = conn.getstat().executeQuery(asql);
                rs.next();
                fil = new File("model.txt");
                output = new FileOutputStream(fil);
                input = rs.getBinaryStream("ablob");
                while (input.read(buffer) > 0) {
                    output.write(buffer);
                }
                file = new FileInputStream("model.txt");
                in = new ObjectInputStream(file);
                treemodel = (DefaultTreeModel) in.readObject();
                treemodel.reload();
                tree.setModel(treemodel);
                
            }
        } catch (Exception e2) {
            e2.printStackTrace();
        }
        
    }
 

Oneixee5

Top Contributor
Du solltest den Code besser strukturieren und dich informieren wie man Datenbanken per JDBC verwendet. Der gezeigte Code setzt das sehr schlecht um.
 

Jw456

Top Contributor
Bist du dir sicher das du deinen tree Objekt in der Datei speicherst?

In Zeile 7 erstellst du einen neuen stream mit auf die variable out.
Das sollte ein andrer Bezeichner sein.

Schließen sollte man die Streams auch am Ende.
 

KonradN

Super-Moderator
Mitarbeiter
Was mache ich falsch?
Der erste Fehler ist, dass Du uns nicht genau sagst, was Du für einen Fehler bekommst.

Dann öffnest Du eine Datei zum schreiben und versuchst diese Datei zu laden, ohne sie vorher zu schließen. Das könnte zu Problemen führen je nach Betriebssystem. Hier der klare Hinweis auf try-with-resources!

Dann musst Du natürlich Daten nicht in eine Datei schreiben. Du liest die Daten aus dem Blob in ein byte Array und kannst darauf dann ein Stream öffnen (ByteArrayInputStream).

Dann solltest Du ganz dringend UI vom Model trennen. Man speichert in der Regel keine UI (JTree) sondern lediglich die dargestellten Daten!
 

grafsoft

Mitglied
Der erste Fehler ist, dass Du uns nicht genau sagst, was Du für einen Fehler bekommst.

Dann öffnest Du eine Datei zum schreiben und versuchst diese Datei zu laden, ohne sie vorher zu schließen. Das könnte zu Problemen führen je nach Betriebssystem. Hier der klare Hinweis auf try-with-resources!

Dann musst Du natürlich Daten nicht in eine Datei schreiben. Du liest die Daten aus dem Blob in ein byte Array und kannst darauf dann ein Stream öffnen (ByteArrayInputStream).

Dann solltest Du ganz dringend UI vom Model trennen. Man speichert in der Regel keine UI (JTree) sondern lediglich die dargestellten Daten!
Jetzt funktionierts! Die Datei nicht zu schließen war natürlich dümmlich. Danke für den Hinweis!

Das Model alleine zu speichern reicht, danke!

Das Datei schreiben war nur für die Kontrolle. Jetzt versuche ich es direkt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
F Jtree kürzt Namen auf ... Java Basics - Anfänger-Themen 4
H Collections JTree remove zeigt keinen Effekt! Java Basics - Anfänger-Themen 8
H Best Practice Wo wird der rootNode eines JTree gespeichert... Java Basics - Anfänger-Themen 0
R JTree bewegen Java Basics - Anfänger-Themen 6
I JTree, Root-Name ändern Java Basics - Anfänger-Themen 4
N Dynamisch JTree erstellen Java Basics - Anfänger-Themen 3
G bestimmte dateiendungen in jtree rausfiltern Java Basics - Anfänger-Themen 7
P JTree aus txt Java Basics - Anfänger-Themen 8
M Warum wird mein Icon bei den JTree Nodes nicht angezeigt? Java Basics - Anfänger-Themen 7
JStickman JTree, JScrollPane, Liste mit graphischer Suchleiste - Dateimanager Java Basics - Anfänger-Themen 10
M JTree + JTab Java Basics - Anfänger-Themen 3
T JTree füllen Java Basics - Anfänger-Themen 3
B JTree knoten wird nicht übernommen Java Basics - Anfänger-Themen 4
S JTree Hilfe Java Basics - Anfänger-Themen 6
P Jtree MouseListener und NoCollapse Java Basics - Anfänger-Themen 2
M JTree ohne root anzeigen Java Basics - Anfänger-Themen 5
F JTree mit JSpinner Java Basics - Anfänger-Themen 2
I Liste von Dateien anzeigen/JTree Java Basics - Anfänger-Themen 4
G Zugriff auf JTree-Objekt Java Basics - Anfänger-Themen 2
K Problem: JTree mit integrierten JCheckboxen Java Basics - Anfänger-Themen 5
B OOP Jtree aus TreeMap<String, String[]> erstellen? Java Basics - Anfänger-Themen 6
D JTree ich dreh durch :D Java Basics - Anfänger-Themen 2
T JTree root setzten Java Basics - Anfänger-Themen 13
G xml Datei in JTree Java Basics - Anfänger-Themen 2
S JTree, Problem mit View Update Java Basics - Anfänger-Themen 2
R Problem mit JTree und JTable Java Basics - Anfänger-Themen 16
A JTree drucken Java Basics - Anfänger-Themen 2
M JTree und ein Button mit ActionListener Java Basics - Anfänger-Themen 3
G Verständnisproblem --> JTree Java Basics - Anfänger-Themen 6
G Filesystem in JTree anzeigen Java Basics - Anfänger-Themen 4
A Jtree Aufbau Java Basics - Anfänger-Themen 5
G JTree ilstener Java Basics - Anfänger-Themen 3
G JTree Java Basics - Anfänger-Themen 2
G Erstellten JTree aus einer XML-Datei akktualisieren Java Basics - Anfänger-Themen 11
S jTree initialisierung Java Basics - Anfänger-Themen 4
F Doppelklick-Event auf JTree Java Basics - Anfänger-Themen 5
J ArrayListen mit Name und Vater an JTree übergeben Java Basics - Anfänger-Themen 3
G aussehen vom jtree wiederherstellen Java Basics - Anfänger-Themen 3
P JTree mit mehreren Wurzeln Java Basics - Anfänger-Themen 2
G Umbenennen im JTree Java Basics - Anfänger-Themen 5
G rechter Mausklick im JTree Java Basics - Anfänger-Themen 2
G Bilder im jTree Java Basics - Anfänger-Themen 3
G jTree Pfad merken Java Basics - Anfänger-Themen 2
S JTree aktualisieren Java Basics - Anfänger-Themen 4
M JTree aktualisieren Java Basics - Anfänger-Themen 3
E JTree - Element suchen Java Basics - Anfänger-Themen 5
G JTree Problem. Java Basics - Anfänger-Themen 5
G JTree Java Basics - Anfänger-Themen 2
E JTree - Verzeichnisbaum Java Basics - Anfänger-Themen 3
G JTree Frage Java Basics - Anfänger-Themen 5
G Ebene von JTree ermitteln? Java Basics - Anfänger-Themen 6
G Icons für JTree skalieren? Java Basics - Anfänger-Themen 3
G Standard JTree ausblenden? Java Basics - Anfänger-Themen 5
B JTree mit Verzeichnissen füllen Java Basics - Anfänger-Themen 17
G Object vor reload von JTree merken und danach wieder setzen? Java Basics - Anfänger-Themen 5
P Wert aus JTree in ComboBox setzen? Java Basics - Anfänger-Themen 2
G Problem mit Refresh von JTree Java Basics - Anfänger-Themen 11
lomtas Scrollbalken für JTree Java Basics - Anfänger-Themen 3
lomtas JTree Struktur im Nachhinein ändern Java Basics - Anfänger-Themen 2
K JTree verlinken Java Basics - Anfänger-Themen 3
T ArrayList mit Dateien in die richtigen Ordner eines JTree Java Basics - Anfänger-Themen 16
K JTree aus DB rekursiv füllen Java Basics - Anfänger-Themen 12
M Dateisystem in Jtree - Ordnericon darstellen Java Basics - Anfänger-Themen 4
G JTree vollständigen pfad anzeigen Java Basics - Anfänger-Themen 11
R JTree aus einer ArrayList Java Basics - Anfänger-Themen 9
J JTree Bilder Java Basics - Anfänger-Themen 2
G JTree.TreeListener Java Basics - Anfänger-Themen 12
S JTree valueChanged() Ausgabe leider immer mit Pfadangabe! Java Basics - Anfänger-Themen 4
S JTree aktualisieren bzw. komplett neu aufbauen Java Basics - Anfänger-Themen 6
G Scrollen im JTree Java Basics - Anfänger-Themen 17
G Hintergrundsfarbe für JTree Java Basics - Anfänger-Themen 15
F JTree-Knoten (DefaultMutableTreeNode) formatieren ? Java Basics - Anfänger-Themen 3
Y JTree: ein Knoten als Objekt Java Basics - Anfänger-Themen 2
J JTable / JTree: Unsichtbare Elemente Java Basics - Anfänger-Themen 4
G JTree Explorer Problem mit listRoots() Java Basics - Anfänger-Themen 9
V Jtree: Alle Verzeichnisse und Ordner anzeigen, aber wie? Java Basics - Anfänger-Themen 2
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
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

Ähnliche Java Themen

Neue Themen


Oben