Deserialisierung anzeigen

The_Answer1985

Erfahrenes Mitglied
Hallo!

Ich habe eine GUI mit Formularkomponente. Die Daten aus dem Formular werden in einer TreeMap gespeichert und sollen auch als Datei gespeichert bzw. geladen werden.

Speichern und Laden funktioniert. Doch nach dem Laden des Objekts soll es auf der GUI ausgegeben werden.

Hierfür dachte ich an eine JTextArea.

Aber wie kann ich der TextArea ein Objekt hinzufügen?
Geht das überhaupt?

Danke für jede Hilfe.
Bei "Code-Bedarf" leg ich gerne nach...
 
Moin!
Wenns nur ums Anzeigen geht, überlege dir eine geeignete Beschreibung deines Objekts, beispielsweise die Belegegung der Objektvariablen.
(Kannst dir dazu auch mal das Reflection Paket anschauen, mit dem du einfach sämtliche Objektvariablen und deren Belegung erfahren kannst..)
Dann überschreibe die toString() Methode deines Objekts und lass sie genau diese Beschreibung liefern.
Dein Objekt bzw. dessen Beschreibung der Textarea hinzufügen kannst du dann mit textArea.append(obj.toString());

*grüssle*
MeinerEiner
 
Danke, das hat schon mal funktioniert (wie einfach eigentlich.....)!

Bin mit der Ausgabe aber net so ganz zufrieden:

"logistik.Auftragsliste@129f3b5"
= paket.Objekt@xxxx

Woran kann das liegen?

mfg
 
Moin!
Sieht so aus, als würdest du Speicheraddressen, und nicht den Inhalt der Objekte ausgeben..
Vielleicht solltest du mal ein bisserl Quellcode posten, dann kann man sich das besser angucken

*grüssle*
MeinerEiner
 
danke für deine schnelle Antwort!
schick dir mal code aus der GUI-Klasse und der Klasse zuständig fürs Speichern in einer Datei:

GUI
java Code:
Code:
public class LogistikGUI extends JFrame
//....
final JTextArea ergebnisliste = new JTextArea(10,50);
// ....
private void dateiOeffnen() throws IOException, ClassNotFoundException
    {
        int ergebnis = dateiauswahldialog.showOpenDialog(this);
        if(ergebnis != JFileChooser.APPROVE_OPTION) {
            return;
        }
        File selektierteDatei = dateiauswahldialog.getSelectedFile();
        if(selektierteDatei == null) {
            JOptionPane.showMessageDialog(this,
                    "Fehler beim Laden",
                    JOptionPane.ERROR_MESSAGE);
            return;
        }
        else{
            Auftragsliste dieDatei = DateiVerwaltung.liesAusDatei();
            ergebnisliste.append(dieDatei.toString());}

Klasse DateiVerwaltung
Code:
public static Auftragsliste liesAusDatei() throws IOException, ClassNotFoundException
    {
        ObjectInputStream is = new ObjectInputStream(
                            new FileInputStream("C:/Auftrag.txt"));
        Auftragsliste gespeicherteAuftraege = (Auftragsliste) is.readObject();
        is.close();

        return gespeicherteAuftraege;
    }

mfg
 
Moin!
Damit kann ich aber leider nichts viel anfangen, da ich
a) nicht weis, wie deine Klasse Auftragsliste aussieht und
b) wie deine toString() Methode aussieht..


Das wäre interessanter zu wissen, schließlich dreht sich darum dein Problem...

*grüssle*
MeinerEiner
 
hi!

sorry, wollte dich net mit code vollposten!

Klasse Auftragsliste:
Code:
public class Auftragsliste implements Serializable
{
    private static final long serialVersionUID = -6312674064418117197L;
    
    public String bearbeiter;
    public String name;
    public String vorname;
    public String adresse;
    public String plz;
    public String ort;
    public String paketNr;
    private TreeMap<String, Auftrag> auftrag;
    public transient int  anzahlAuftraege;

    public Auftragsliste(String bearbeiter, String name, String vorname, String adresse, String plz, String ort, String paketNr)
    {
        if(bearbeiter == null) {
            bearbeiter = "";
        }
        if(name == null){
            name = " ";
        }
        if(vorname == null) {
            vorname = "";
        }
        if(adresse == null) {
            adresse = "";
        }
        if(plz == null) {
            plz = "";
        }
        if(ort == null) {
            ort = "";
        }
        
        if(paketNr == null){
            paketNr = "";
            
        }
        
        this.bearbeiter = bearbeiter.trim();
        this.name = name.trim();
        this.vorname = vorname.trim();
        this.adresse = adresse.trim();
        this.plz = plz.trim();
        this.ort = ort.trim();
        this.paketNr = paketNr;
        
        anzahlAuftraege = 0;
        auftrag = new TreeMap<String, Auftrag>();
    }

    public void neuerAuftrag(Auftrag derAuftrag) throws Exception
    {
        if(derAuftrag == null) {
            throw new IllegalArgumentException(
                   "Parameter in neuerAuftrag darf nicht null sein.");
        }
             
        else{
            
            auftrag.put(derAuftrag.gibBearbeiter(), derAuftrag);
            auftrag.put(derAuftrag.gibName(), derAuftrag);               
            auftrag.put(derAuftrag.gibVorname(), derAuftrag);
            auftrag.put(derAuftrag.gibAdresse(), derAuftrag);
            auftrag.put(derAuftrag.gibPlz(), derAuftrag);
            auftrag.put(derAuftrag.gibOrt(), derAuftrag);
            auftrag.put(derAuftrag.gibPaketNr(), derAuftrag);
            anzahlAuftraege++;
            System.out.println("Erfolgreich gespeichert!");
            
        }
    }
    
    public Auftrag[] suche(String praefix)
    {
        // Eine Liste für die Treffer anlegen.
        List<Auftrag> treffer = new LinkedList<Auftrag>();
        if(praefix != null) {
            // Finden von Schlüsseln, die gleich dem oder größer als
            // der Präfix sind.
            SortedMap<String, Auftrag> rest = auftrag.tailMap(praefix);
            Iterator<String> it = rest.keySet().iterator();
            // Stoppen bei der ersten Nichtübereinstimmung.
            boolean sucheBeendet = false;
            while(!sucheBeendet && it.hasNext()) {
                String schluessel = it.next();
                if(schluessel.startsWith(praefix)) {
                    treffer.add(auftrag.get(schluessel));
                }
                else {
                    sucheBeendet = true;
                }
            }
        }
        Auftrag[] ergebnisse = new Auftrag[treffer.size()];
        treffer.toArray(ergebnisse);
        return ergebnisse;
    }

    public int gibAnzahlEintraege()
    {
        return anzahlAuftraege;
    }
    
    public boolean schluesselBekannt(String schluessel)
        {
            return auftrag.containsKey(schluessel);
        }
     
    public void entferneAuftrag(String schluessel)
    {
        if(schluesselBekannt(schluessel)) {
            Auftrag derAuftrag = auftrag.get(schluessel);
            auftrag.remove(derAuftrag.gibName());
            auftrag.remove(derAuftrag.gibVorname());
            auftrag.remove(derAuftrag.gibAdresse());
            auftrag.remove(derAuftrag.gibPlz());
            auftrag.remove(derAuftrag.gibOrt());
            anzahlAuftraege--;
        }
    }

    public HashSet<String> alleKontaktdaten()
    {
        
        Collection values = auftrag.values();
        
        // Objekt Auftrag wird in String umgewandelt
        String auftragAlsString = auftrag.toString();
         // Der eben erzeugte String wird zerlegt und einzelne Wörter in einem Array gespeichert
        String [] zerteilt = auftragAlsString.split(" ");
        
        // Einzelne Wörter werden einer HashSet hinzugefügt
        HashSet<String> einzelneWoerter = new HashSet<String>();
        
        // Iterator zum Durchlaufen der HashSet wird instanziert
        Iterator i = values.iterator();
        while (i.hasNext()) {
            Auftrag naechsterAuftrag = (Auftrag)i.next();
            
            // so lange im Array zerteilt Elemente vorhanden sind werden sie der Set hinzugefügt 
            for(String einBestandteil : zerteilt){
                
                einzelneWoerter.add(einBestandteil + "\n");
                
            }
        }
        // die Set wird zurückgegeben
        return einzelneWoerter;
        
    }
 
    public void aendereKontakt(String alterSchluessel,
            Auftrag daten) throws Exception
    {
        if(schluesselBekannt(alterSchluessel) && daten != null){
            entferneAuftrag(alterSchluessel);
            neuerAuftrag(daten);
        }
    }
    
    public String gibBearbeiter()
    {
        return bearbeiter;
    }

    public String gibName()
    {
        return name;
    }

    public String gibVorname()
    {
        return vorname;
    }
    
    public String gibAdresse()
    {
        return adresse;
    }
    
    public String gibPlz()
    {
        return plz;
    }
    
    public String gibOrt()
    {
        return ort;
    }
    
    public String gibPaketNr() {
        
        return paketNr;
    }
    
    public String toString(){
        
        return "Sachbearbeiter: " + gibBearbeiter() + "\nKundendaten: \n"  + gibVorname() + " "+ gibName() + "\n" + gibAdresse() + "\n" + gibPlz() + " " + gibOrt() + "\n"; 
    }
}

Hab noch ein bisschen an der toString() rumgebastelt, hab vorher auf die falsche zugewiesen, deswegen hats wohl nicht funktioniert.

Jetzt bekomm ich wenigstens meine Ausgabe, aber nach den Strings "Sachbearbeiter:" und "Kundendaten:" erhalte ich keine Werte aus den Methoden.

Vllt kannst du mir ja noch helfen, wäre sehr dankbar!

mfg
 
Moin!
Ehrlichgesagt kann ich keinen Fehler entdecken,
Code:
JFrame j = new JFrame();
JTextArea area = new JTextArea();
Auftragsliste t = new Auftragsliste("bear","name","vorname","Addr","plz","ort","pnummer");
area.append(t.toString());
j.getContentPane().add(area);
j.setSize(400,400);
j.setVisible(true);
sorgt bei mir fuer eine korrekte Ausgabe..
tritt der Fehler immer auf, bzw. wann speziell?

*grüssle*
MeinerEiner
 
Hmm, kann es eventuell sein, dass dein serialisiertes Objekt eventuell noch keine angepasste toString-Methode enthielt?
 
Zurück