# xmlencode



## Fantatier (15. Jan 2007)

Ich bekomme beim speichern meines jtreeModels mithilfe des XMLEncoders folgende Fehlermeldung
java.lang.RuntimeException: failed to evaluate: <unbound>=Class.new();
Jetzt verstehe ich aber nicht was die soll, und auch google scheint nicht zu wissen wodurch sie verursacht wird.
Und mir ist auch nicht klar nach welchen kriterien der encoder entscheidet welche Objekt eigenschaften _wichtig _sind, also gespeichert werden und welche nicht. denn beim laden fehlen doch einige Informationen.
gibt es also eine möglichkeit ohne rücksicht alle informationen eines (bzw. aller) objekte zu speichern.

Und noch eine Frage hat zwar nix mit xml zu tun, aber gibt es vielciht eine möglichkeit einfach den ganzen JTree als Objekt *inclusive* aller userObjekte einfach mit nem outputstreem zu speichern, ich brauche für diese anwendung eigentlich kein xml, ich will im wesentlichen einfach nur den bei Laufzeit erstellten tree speichern und laden können.


----------



## Wildcard (15. Jan 2007)

Der XMLEncoder speichert alles was den bean-Konventionen entspricht (da er für beans ist).
Wenn du kein XML brauchst (oder gar keine bean hast, was ich in deinem Fall vermute  :wink: ) kannst du einfach mit zB einem ObjectOutputStream serialisieren.


----------



## Fantatier (15. Jan 2007)

ObjectOutputStream scheint aber auf das TreeModel ausgeführt auch nur quasi objektreferenzen zu speichern, aber nicht die eigentliche objekte.
das soll heißen wenn ich die datei lade wird zwar der tree in der richtigen "form und größe" angezeigt jedoch haben die treenodes nicht mehr meine objekte ...


----------



## Wildcard (15. Jan 2007)

Liegt daran das das TreeModel im JTree als transient definiert wurde weil man das üblicherweise seperat speichert.


----------



## Fantatier (15. Jan 2007)

entschuldige meine naivität, aber d.h. für mich was genau?
was muss ich ändern? danke 

ich kann mit transident nicht so viel anfangen...   ???:L


----------



## Wildcard (15. Jan 2007)

Das heißt das du das Model seperat serialisieren musst (oder dir überlegen ob es nicht sinnvoller wäre *nur* das Model zu serialisieren  :wink: )


----------



## Fantatier (15. Jan 2007)

es hat nicht gerade zufällig jemand beispielcode da um einen ganzen jtree zu speichern und zu laden?! ich würde mich ja gerne mit beans beschäftigen, weil das bisher am ehesten funktioniert hat, aber mir rennt die zeit davon...


----------



## Wildcard (15. Jan 2007)

wenn du wirklich den ganzen JTree serialisieren willst:
-Model serialisieren
-JTree serialisieren

andersrum:
-Model deserialisieren
-JTree deserialisieren
Model auf JTree setzen


----------



## Fantatier (15. Jan 2007)

ich bin mir jetzt nicht sicher ob das klar geworden ist, ich will den inhalt des trees speichern, nicht die eigentliche jtree komponente


----------



## Wildcard (15. Jan 2007)

Dann serialisierst du wie schon gesagt nur das Model des Trees.


----------



## Fantatier (15. Jan 2007)

aber dann wird aus dem linken das rechte nach dem laden






mal von dem renderer abgesehen, sind da einfach nicht die objekte gespeichert...
also PWG-0, BS-0, BWG-1 sind userobjekte mit daten und informationen


----------



## Wildcard (15. Jan 2007)

Zeig mal Code was du machst.


----------



## Fantatier (15. Jan 2007)

speichern action listener


```
FileDialog fd = new FileDialog(this,"Save designproject", FileDialog.SAVE);
        fd.setVisible(true);
        
        String filename = fd.getFile();   
        String path = fd.getDirectory();
        if (filename != null) {          
            try {
                FileOutputStream fos = new FileOutputStream(filename);
                ObjectOutputStream  o = new ObjectOutputStream(fos);
                o.writeObject(jTree3.getModel());
                o.close();
            }
            catch (IOException e) {
                System.out.println(e);
            }
        }
```

laden

```
FileDialog fd = new FileDialog(this,"Load designproject", FileDialog.LOAD);
        fd.setVisible(true);
        
        String filename = fd.getFile();   
        String path = fd.getDirectory();
        try {
            FileInputStream fos = new FileInputStream(filename);
                ObjectInputStream  o = new ObjectInputStream(fos);
            ComponentManagerModel = (DefaultTreeModel)o.readObject();
            reInitComponentManagerModel = false;
            o.close();                    
            TreeErsetzen();                     // methode die die tree anzeige aktualisiert
        }
        catch (Exception e) {
            System.out.println(e);
        }
```


----------



## Wildcard (15. Jan 2007)

gewöhn dir mal an Methoden klein zu schreiben.
Wo setzt du das Model auf den Tree?


----------



## Fantatier (15. Jan 2007)

in der treeErsetzen methode.

meistens schreibe ich methoden klein, keine ahnung wiso gerade die nicht.


----------



## Wildcard (15. Jan 2007)

Poste die auch bitte.


----------



## Fantatier (15. Jan 2007)

```
private void TreeErsetzen(){
        
        //myTree = new OBDComponentManagerTree(rootNode);
        if(reInitComponentManagerModel){
            ComponentManagerModel = new DefaultTreeModel(rootNode);
        }
        reInitComponentManagerModel=true;
        jTree3.setModel(ComponentManagerModel);
        jTree3.setToggleClickCount(0);
        //jTree3.setRootVisible(false);
        jTree3.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        
        if(!testlistener){
            jTree3.addTreeSelectionListener(new TreeSelectionListener() {
                public void valueChanged(TreeSelectionEvent e) {
                    try{
                        System.out.println(e.getPath().getPathComponent(e.getPath().getPathCount()-1).toString());
                        setClickedWhat(e.getPath().getPathComponent(e.getPath().getPathCount()-1).toString());
                        setSelectedObject(((DefaultMutableTreeNode)e.getPath().getLastPathComponent()).getUserObject());
                        setSelectedDepth(e.getPath().getPathCount());
                        setClickedWhat(e.getPath());
                        activeLayer=getParentLayer(e.getPath().getPathComponent(e.getPath().getPathCount()-1));
                        somethingSelected=true;
                    }catch(Exception x){System.out.println("problem mit dem value changed im Component Manager");}
                }
            });
            jTree3.addMouseListener(new MouseListener() {
                public void mouseClicked(MouseEvent e) {
                    if(e.getClickCount()==2){
                        try{
                            boolean check=false;
                            System.out.println("click "+clickedWhat);
                            System.out.println("clicked Depth "+clickedDepth);
                            System.out.println("what am i:"+clickedWhatObject.toString());
                            if(clickedWhatS.equals("Detector list")||clickedWhatS.equals("Source list")||clickedWhatS.equals("Waveguide list")){
                                check=true;
                            } else{
                                check=false;
                            }
                            if(!check){
                                if(clickedWhatS.substring(0,2).equals("DT")){
                                    startDetectorDialog(clickedWhatObject);
                                } else if(clickedWhatS.substring(0,3).equals("Lay")){
                                    startLayerDialog(clickedWhatObject);
                                } else if(clickedWhatS.substring(0,3).equals("PWG")){
                                    startWaveguideDialog(clickedWhatObject);
                                } else if(clickedWhatS.substring(0,3).equals("BWG")){
                                    startBranchDialog(clickedWhatObject);
                                } else if(clickedWhatS.substring(0,2).equals("LS")){
                                    startLineDialog(clickedWhatObject);
                                } else if(clickedWhatS.substring(0,2).equals("BS")){
                                    startBendDialog(clickedWhatObject);
                                } else if(clickedWhatS.substring(0,2).equals("IS")){
                                    startIncoherentSourceDialog(clickedWhatObject);
                                }
                            }
                        }catch(Exception ex){System.out.println("problem mit dem doppel click im Component Manager");}
                    }
                    
                    
                }
                public void mouseEntered(MouseEvent e) {
                }
                public void mouseExited(MouseEvent e) {
                }
                public void mousePressed(MouseEvent e) {
                }
                public void mouseReleased(MouseEvent e) {
                }
            });
            testlistener=true;
        }
        
        render = new OBDComponentManagerTreeRenderer();
        jTree3.setCellRenderer(render);
        
        //TODO
        for (int i = 0; i < jTree3.getRowCount(); i++) {
            jTree3.expandRow(i);
            //System.out.println("row "+i+" expanded");
        }
        //ComponentManagerModel.reload();
        //jTree3 = myTree;
    }
```


----------



## Fantatier (17. Jan 2007)

Any takers?

please


----------



## Fantatier (19. Jan 2007)

Hat keiner eine ahnung was beim laden/speichern schief geht?


----------



## Fantatier (19. Jan 2007)

vieleicht könnte jemand den thread mal verschieben, da er ja jetzt nicht mehr so viel mit XML zu tun hat, vieleicht bekomme ich dann wieder resonanz, danke


----------

