2 Observable und ein Observer...

Goldfish

Bekanntes Mitglied
Hallo Leute, ich hab mal wieder ein kleines Problem, dass sich mir nicht erschließt.
Ich habe 2 unterschiedliche Observable Klassen und eine andere Klasse soll beide beobachten. Wenn ich jetzt in der Observable loslege und meine gewünschte Liste ändere, setz ich das Flag mit setChanged() und informiere alle Observer. Nur dummerweise, kommt beim Observer selber nie was an, obwohl ich laut meiner Testausgaben am notifyObservers(...) vorbeikomme.
Die Observer Klasse ist zu dem auch der einzige Observer des Observable. Und die Testausgabe countObservers liefert mir auch den Wert 1 und da ich sonst keine Klass ehinzugefügt habe, ist das Ergebnis ja schlüssig. Aber seltsamerweise kommt bei der update Funktion meines Observers nie was an... nur die Änderungen der anderen Observable Klasse werden angenommen... kann man mit einer Klasse nur ein Objekt zur Zeit beobachten? oder woran kann das liegen?

[JAVA=42]

public UserRoom( ...){
games = new GameManagement();
games.addObserver(this);
users = new UserManagement();
initializeBoxes();
...
}


public class GameManagement extends Observable{

......

Request r;
public void addActiveGame(Game game){
activeGames.add(game);
// creates a request to notify the activeGamesList
r = new Request(RequestType.ACTIVEGAME);
r.set(RequestKey.ADDACTIVEGAME,true);
setChanged();
notifyObservers(r);
}
public void removeActiveGame(Game game){
activeGames.remove(game);
// creates a request to notify the activeGamesList
r = new Request(RequestType.ACTIVEGAME);
r.set(RequestKey.ADDACTIVEGAME,false);
setChanged();
notifyObservers(r);
}
}
[/code]
 

eRaaaa

Top Contributor
In deinem Code erkennt man nur ein Observable nämlich GameManagement.
Dieses registrierst du mit games.addObserver(this); , was ist mit dem anderen Observable? Ist das die Klasse UserManagement? Dann fehlt da wohl noch ein users.addObserver(this); oder nicht? ???:L

kann man mit einer Klasse nur ein Objekt zur Zeit beobachten?
Nein eig. nicht :)
 

Goldfish

Bekanntes Mitglied
ne, das andere hab ich einfach rausgelassen aus dem Codestück, weil ichs nicht für so wichtig gehalten hab ^^
das andere ruft sich einfach über den Aufruf eines anderen Objektes auf.

ns.getMessageBoard().setRequest(r);

und das folgt eigentlich unmittelbar nach dem anderen Aufruf, also da wo die Pünktchen sind ^^

kann man mit einer Klasse nur ein Objekt zur Zeit beobachten?
Nein eig. nicht

Dann frage ich dazu mal noch. Könnte es sein, dass sich das notifyObservers() bei Nebenläufigkeit in so einem Fall vielleicht in die Haare bekommt und dass es deshalb nicht klappt?
Das MessageBoard ist das andere Observable Objekt. Und das bekommt in unregelmäßigen Zeitabständen (bei mir gerade noch in regelmäßigen, wegen eines Testdummys) den Wert geändert und informiert dann die Observer. Unschönerweise hab ich es in diesem Moment in etwa so, wenn ich das in meinem Programmcode richtig sehe, dass die beiden update extrem zeitnah ausgerufen werden. Also wenns daran nicht liegt, bin ich mehr als überfragt... und wenns daran liegt, weiß ich nicht, wie ichs lösen soll XD
 

eRaaaa

Top Contributor
ne, das andere hab ich einfach rausgelassen aus dem Codestück, weil ichs nicht für so wichtig gehalten hab ^^
das andere ruft sich einfach über den Aufruf eines anderen Objektes auf.

ns.getMessageBoard().setRequest(r);

und das folgt eigentlich unmittelbar nach dem anderen Aufruf, also da wo die Pünktchen sind ^^

Nur nochmal deutlich damit wir nicht aneinander vorbei reden: Ich rede NICHT vom
Code:
notifyObservers
-Aufruf sondern vom
Code:
addObserver
(this) Aufruf!

ns.getMessageBoard().setRequest(r); <-- Bei dem Aufruf übergibst du doch weder
Code:
this
, noch
Code:
users
?! ;/ Wie kannst du dann also
Code:
this
(bzw dieses eine Objekt) als
Code:
Observer
irgendwo registrieren? :bahnhof:

(ist schon ziemlich spät..joah ... :D)
edit: Bekommst du es evtl. hin das Ganze in einem minimalen ausführbarem Beispiel darzustellen?
 

Goldfish

Bekanntes Mitglied
sorry ich hab gepennt, als ich das geschrieben hab XD
das sieht so aus XD
ns.getMessageBoard().addObserver(this);

Und das funktioniert ja auch hervorragend. Es geht ja um das andere, das meckert. Ich hab eben auch schon festgestellt, dass es nur nicht geht, wenn ich es an genau dieser einen Stelle aufrufe. Wenn ich das über nen anderen Button mache, klappt es, warum auch immer...

Also das in einem kleinen Beispiel auszuführen krieg ich bestimmt hin ^^
Wir nehmen das, was wir vorhin schon hatten und das hier, ich habs mal eben etwas umgeändert.
[JAVA=42]
private void makeMeObserver(){
ns.getMessageBoard().addObserver(this);
// this class will be the only observer of GameManagement to watch the
// activeGameList.
games.addObserver(this);
}
[/code]

Das ist jetzt die Funktion die die Klasse UserRoom zum Observer von beiden Klassen dort macht.

jetzt ist die Sache die:
in einer anderen Klasse, hab ich ebenfalls eine Instanz von... oh... ist echt spät... ich weiß was los ist XD schön das man drüber reden konnte ^^
In einer anderen Klasse, hab ich ebenfalls eine Instanz dieser Klasse erstellt und versuche dann das Ereignis auszulösen. Hat wer das Problem entdeckt? XD ich hab zwei Instanzen der Klasse und beobachte die falsche XDDD Doofheit tut halt weh XD

Danke soweit XD
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
M MVC: PropertyChangeListener vs Java Observer & Observable Allgemeine Java-Themen 11
Z Observer/Observable & Grundlagen Allgemeine Java-Themen 6
H Observer und Observable Allgemeine Java-Themen 3
G Observer / Observable oder doch lieber Message Broker? Allgemeine Java-Themen 2
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
lhein Tutorial zu Observer / Observable? Allgemeine Java-Themen 6
S Observable und Observer Allgemeine Java-Themen 10
G Frage zu (mehrfachem) Observable/Observer Allgemeine Java-Themen 2
A Observable BeansBinding an einer JTable bzw. JXTable Allgemeine Java-Themen 3
P fehlende Mehrfachvererbung logging.Handler impl. Observable Allgemeine Java-Themen 5
GreenTeaYT Verstehe nicht ganz das Observer Pattern in einer Arrayliste? Allgemeine Java-Themen 3
S OOP JFrame als Observer eines JPanel Allgemeine Java-Themen 3
A Observer und Initialisierung Allgemeine Java-Themen 7
L Registrierung von Observer Allgemeine Java-Themen 4
S Wie kann ein Observer mehrere Observables beobachten? Allgemeine Java-Themen 9
R Observer Umsetzungsproblem Allgemeine Java-Themen 7
K Verständnisprobleme bei Observer-Pattern mit größerem Datenmodell Allgemeine Java-Themen 32
nrg Java Observer in SysTray laufen lassen / Console schließen Allgemeine Java-Themen 2
T Observer vs Listener Allgemeine Java-Themen 18
A Observer Pattern: feuern bei neuer Referenz-Zuweisung? Allgemeine Java-Themen 8
V Threads und Observer Allgemeine Java-Themen 18
U Verständnisschwierigkeiten Observer Pattern Allgemeine Java-Themen 18
B Observer vs Listener (GUI-Programmierung) Allgemeine Java-Themen 5
M Observer serialisieren Allgemeine Java-Themen 7
P Observer/TimerTask Allgemeine Java-Themen 3
P Observer Allgemeine Java-Themen 4
B Observer reagieren beim 2ten mal nicht Allgemeine Java-Themen 23
P Observer, nicht alle updates bearbeiten Allgemeine Java-Themen 2
P Abmelden beim Observer Allgemeine Java-Themen 4
N Observer Pattern Allgemeine Java-Themen 2
M Frage zu update Methode von Observer! Allgemeine Java-Themen 40
G problem mit dem observer pattern Allgemeine Java-Themen 3
G Frage zum Observer Pattern Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben