PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Objekte aktualisieren



elitemassacre
11-05-2005, 10:07
hallo,

ich hab folgendes Problem:
ich hab per ObjectInputStream ein Objekt eingelesen, und möchte nun das aktuelle Objekt (welches gerade genutzt wird) durch das eingelesene ersetzen.

Codebeispiel (FDrawing.java):

FileInputStream file = new FileInputStream("neues_Objekt.tmp");
ObjectInputStream is = new ObjectInputStream(file)
FDrawing neu = (FDrawing)is.readObject();


Das Einlesen funktioniert wunderbar, nur wie lautet der Befehl zum ersetzen des aktuellen objekts? ("this = neu??")

Boron
11-05-2005, 10:21
Wenn ich das richtig verstanden habe, dann geht das was du vorhast nicht.
Das wäre ja, als ob ein Mensch selbst versucht im laufenden Betrieb (das nennt man Leben) sein Gehirn durch ein anderes zu ersetzen.

Ein Objekt kann sich nicht selbst durch ein anderes ersetzen.
this = dasNeueObjekt geht also nicht.

Das kann nur von außerhalb durchgeführt werden.
Analog: Gehirntransplantation durch Chirurg :D.

Matflasch
11-05-2005, 11:58
Wieso sollte das nicht gehen?
Man kann, wenn es im Quelltext steht, doch auch Objekte anlegen bei z.B. nem Mausklick.
Dann würde man es halt aus ner Datei einlesen und setzen.

Ich denke mal, dass es sehr davon abhängig ist, was für ein Objekt es ist.
Um was handelt es sich denn genauer?

(Oder ich habs falsch verstanden ;))

Mfg, Matflasch

elitemassacre
11-05-2005, 15:57
ok, ich habs jetzt über einen umweg gelöst. ich habe ein neues objekt erstellt, welches das andere aufruft (TDrawing ist das zu ersetzende Objekt):

Code von FDrawing.java:

FileInputStream file = new FileInputStream("neues_Objekt.tmp");
ObjectInputStream ois = new ObjectInputStream(file);
TDrawing neu = (TDrawing) ois.readObject(); //TDrawing ist das zu aktualisierende objekt

altes_TDrawing = neu; //altes_TDrawing wurde von FDrawing angelegt

wie bringe ich aber nun FDrawing dazu, das alte TDrawing auf das neue zu aktualisieren? hab schon kombinationen mit show() und update() probiert, hat aber nichts funktioniert :/

PS: TDrawing enthält eine GUI, die die geladenen zeichnungen anzeigen soll

Boron
11-05-2005, 16:15
Bevor du alt = neu machst musst du die "Zeichnungselemente" aus dem alten TDrawing Abjekt in das neue kopieren.
...
:confused:
Irgendwie kapier ich nicht was du machen willst?

Versuch deinen Sachverhalt mal mit einfachen Worten zu erklären.
Ich fange mal für dich an.

- Du speicherst Objekte vom Typ TDrawing in einer Datei, in dem du einen ObjectOutputStream verwendest.
- TDrawing ist ein <...>, und kann <...> anzeigen.
- Das Hauptprogrogramm kann solche TDawings im Fenster anzeigen und soll diese zur Laufzeit austauschen können (speichern in Datei und laden aus Datei).
- Du machst weiter und ergänzt die leeren Stellen <...>, bzw. änderst alles was ich geschrieben habe.

nul
11-05-2005, 16:29
Du koenntest so was wie einen Kopierkonstruktor verwenden. Du uebergibst dem alten element das neue element, das alte holt sich alle werte des neuen, ersetzt die alten werde und fertig.
Ist aber nicht unbedingt eine sehr elegante Loesung und evtl. sehr fehleranfaellig.

elitemassacre
11-05-2005, 17:26
TDrawing verwaltet zeichnungen (dreicke, kreise etc), die dann auch auf ner gui angezeigt werden. ich habe ein objectoutputstream geschrieben, was die aktuellen zeichnungen abspeichert (sprich: das ganze TDrawing-Objekt) und was es auch ohne fehler macht. nun habe ich ein laden-dialog geschrieben, welcher die abgespeicherten zeichnungen wieder laden soll. mein problem ist nun, dass er die geladenen zeichnungen zwar läd, aber nich aktualisiert (sprich: es ändert sich nichts an der gui - die alten zeichnungen bleiben trotzdem weiterhin bestehen).

hoffe ich konnte mit dem verständnis weiterhelfen

bischi
11-05-2005, 17:47
Bevor du alt = neu machst musst du die "Zeichnungselemente" aus dem alten TDrawing Abjekt in das neue kopieren.

Sowohl alt als neu sind Referenzen (sprich Pointer). Es wird also überhaupt nichts kopiert, sondern nur Referenzen geändert (bzw Zeiger auf anderes Objekt gerichtet).

Vielleicht hilft das jemandem weiter...

MfG Bischi

PS: Was du machen willst, hat in erster linie damit zu tun, dass du die GUI updaten musst - wie das geht (ob ein this.setVisible(true) reicht) musst du nachschauen.

elitemassacre
11-05-2005, 22:10
habs mittlerweile hinbekommen. trotzdem danke für eure unterstützung!

RogerJFX
25-05-2005, 00:20
Ich sage es jedem meiner Freunde: Java kann nur schreiben, wer auch C kann. Herrgott, dann zeigt Deine Refernenz/Pointer eben auf was "new".

Übrigens passiert "new" immer (IMMER) auf dem Heap.

Schon mal Symbian gehackt? Viel Spaß!

Cheers,

Roger

RogerJFX
25-05-2005, 00:32
OOOOha, sorry, ähhh...

Matflasch
25-05-2005, 08:35
OOOOha, sorry, ähhh...

:confused: