Problem beim Abspeichern eines JTree

M

MeinerEiner_80

Servus zusammen!
Wie der Titel schon sagt, hab ich ein Problem beim Abspeichern eines JTree, genauer gesagt eines Treemodel.
Der Baum sieht bei mir folgendermassen aus:
Code:
package GUI;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class BonusTree{
       DefaultTreeModel treeModel;
       BonusTreeListener btl;
    
     /**
     * Liest die als XML-File vorhandenen Daten des Treemodels aus der Datei 
     * "BonusListe" aus, oder, falls die Datei nicht vorhanden ist
     * erstellt ein neues Treemodel mit einem DefaultMutableTreeNode als Wurzel
     * @return eine Instanz des BonusTree
     */
    
    public BonusTree() {
        super(createModel());
        treeModel = (DefaultTreeModel)this.getModel();
        btl = new BonusTreeListener();
        treeModel.addTreeModelListener(btl);
        this.setEditable(true);
        
    private static DefaultTreeModel createModel() {
        try{
        XMLDecoder d = new XMLDecoder(
                   new BufferedInputStream(
                       new FileInputStream(Pfad)));
        DefaultTreeModel treeModel =(DefaultTreeModel)d.readObject();
        d.close();
        return treeModel;    
        }
    catch (FileNotFoundException e) { 
        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("new Root");
        DefaultTreeModel treeModel = new DefaultTreeModel(rootNode);
        return treeModel;
    } 
}
    
    void saveNodes(){
        
        try{
            XMLEncoder e = new XMLEncoder(
                    new BufferedOutputStream(
                        new FileOutputStream(Pfad)));
            e.writeObject(treeModel);
            e.flush();
            e.close();
        }
        catch(IOException e){e.printStackTrace();}
    }
}
Füge ich der Wurzel nun einen neuen DefaultMutableTreeNode hinzu, funktioniert das Abspeichern ohne Probleme.
Füge ich stattdessen aber eine Instanz der Klasse( welche später noch erweitert wird):
Code:
package GUI;
import javax.swing.tree.DefaultMutableTreeNode;

public class BonusNode extends DefaultMutableTreeNode {


    public BonusNode(String anbieter){
        super(anbieter);
    }
    
}
hinzu, kommt es zu folgender Fehlermeldung beim Abspeichern:
Code:
java.lang.InstantiationException: GUI.BonusNode
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement DefaultMutableTreeNode.add(BonusNode);
Continuing ...
Ich bin da ein wenig ratlos. Hat jemand ne Idee woran das liegen könnte?

*grüssle*
MeinerEiner
 
Okay, hat sich erledigt. Man kann mit dem XMLEncoder nur "bohnenartige" - Komponenten ;) abspeichern. Dazu gehört u.a. auch ein leerer Konstruktor...
 
Zuletzt bearbeitet von einem Moderator:
Zurück