Observer reagieren beim 2ten mal nicht

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
Hallo,

ich hab ein kleines Problem mit dem Observer-Pattern.

Undzwar funktioniert das Observer-Pattern schon, aber nur beim ersten mal :-(
Sobald es ein zweites mal ausgeführt wird, reagieren die Observers (2 Stück) nicht mehr.
Code:
1ter Ablauf (richtig):

setChanged->if(hasChanged)->notifyObservers
Observer 1 fürht Code in update aus
Observer 2 macht nix in update
Observer 1 ändert Observable
setChanged->if(hasChanged)->notifyObservers
Observer 1 macht nix in update
Observer 2 fürht Code in update aus
Und das ganze nochmal sobald ein Button geklickt wird.
Jetzt macht er diesen Ablauf nur beim ersten mal. Beim zweiten mal nur soweit:
Code:
2ter Ablauf (falsch):

setChanged->if(hasChanged)->notifyObservers

Versteh echt ned warum keine der updateMethoden der Observers "erreicht" wird :-(
Nicht mal ein System.out.println("bla"); am anfang einer update wird ausgegeben...
Fast so als wenn das "Signal" verloren geht...

Wisst ihr weiter?
 

babuschka

Top Contributor
Hallo,

hab jetzt hier nur die beteiligten methoden drin:

Im Observable
Code:
...
public void setCode(int code) 
{
        setChanged();
        Code = code;
        updateObservers();
}
...
public void updateObservers()
{
    if(Controller.updateDB==true)
    {
	Controller.updateDB=false;
	System.out.println("Gehe nun in update View");
    }
    else if(Controller.updateDB==false)
    {
	Controller.updateDB=true;
	System.out.println("Gehe nun in update DB");
    }
				
    if(hasChanged())
    {
                System.out.println("BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
                notifyObservers(DTCCode);
    }    
}
....

In Observer 1
Code:
...
public void update( Observable ob,Object arg)
{
        System.out.println("UpdateMehtode-DB");
        if(Controller.updateDB==true)
        {	
	xxx
        }
}
...

In Observer 2
Code:
...
public void update( Observable ob,Object arg)
{
        System.out.println("UpdateMethode-View");
        if(Controller.updateDB==false)
        {
            xxx
        }
}
...


Die bool wird richtig gesetzt, da bin ich mir sicher. Nur wenn das Pattern zum 2ten mal ausgeführt werden soll, kommt auch noch die anzeige Blaaaaa...., aber keine der updates wird erreicht.
Konsolenausgabe:
Code:
Gehe nun in update DB
BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
UpdateMehtode-DB
Gehe nun in update View
UpdateMethode-View
->Repaint
Gehe nun in update DB
BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 

Kim Stebel

Bekanntes Mitglied
guck dir die boolean-variablen mit nem debugger an...
und ==true ist überflüssig...
und statt ==false benutze !
 

babuschka

Top Contributor
mhhh....aber nach den notifyObservers werden die update-Methoden der Observers aufgerufen....
in denen mach ich erstmal ein System.out.println() und danach überprüf ich auf die bool

da müsst er doch auch was auf der konsole ausgeben und ned einfach nach "BLAAA..." aufhören oder nicht?
 

Kim Stebel

Bekanntes Mitglied
anscheinend werden sie eben nicht aufgerufen...was macht notifyObservers? den code davon hast du weggelassen
 

babuschka

Top Contributor
also meine klasse implementiert observable...
in der java-api steht dazu folgendes

notifyObservers():
Code:
notifyObservers

public void notifyObservers()If this object has changed, 
as indicated by the hasChanged method, then notify all 
of its observers and then call the clearChanged method 
to indicate that this object has no longer changed. 
Each observer has its update method called with two arguments: 
this observable object and null. In other words, this method is equivalent to: 

notifyObservers(null)
 

Kim Stebel

Bekanntes Mitglied
implementiert? du meinst erweitert...
implementieren kann man nur interfaces...
der fehler wird wohl in einem teil des codes liegen, den du noch nicht gepostet hast. bist du mal mit nem debugger durchgegangen? dieses pseudo-debugging mit system.out.println ist völlig unnötig und umständlich.
 

Kim Stebel

Bekanntes Mitglied
willst du mich veralbern oder so? anstatt auf meine Frage zu antworten willst _du_ _mir_ was über design patterns beibringen? keine MVC-anwendung kommt ohne observer aus...
 

babuschka

Top Contributor
ich hab doch nen observer drin ^^

meineKlasse implements Observer

guck dir halt das bsp im link an....so ist mein aufbau des mvc auch

was gibts da ned zu verstehen?
 

byte

Top Contributor
Kim Stebel hat gesagt.:
willst du mich veralbern oder so? anstatt auf meine Frage zu antworten willst _du_ _mir_ was über design patterns beibringen? keine MVC-anwendung kommt ohne observer aus...

Die Frage von ihm bezog sich wohl eher auf die Observer/Observable Implementierung der Java API.

Denn das hier lässt schon schließen, als wenn Du das noch nicht benutzt hast:
Kim Stebel hat gesagt.:
...was macht notifyObservers? den code davon hast du weggelassen

Also kein Grund, so überheblich zu reagieren. ???:L
 

babuschka

Top Contributor
danke byto :)

hab nomal den debugger benutzt....hab das problem gefunden, doch ne lösung kenn ich dazu ned

Code:
public void updateObservers() 
{ 
    if(Controller.updateDB==true) 
    { 
   Controller.updateDB=false; 
   System.out.println("Gehe nun in update View"); 
    } 
    else if(Controller.updateDB==false) 
    { 
   Controller.updateDB=true; 
   System.out.println("Gehe nun in update DB"); 
    } 
             
    if(hasChanged()) 
    { 
                System.out.println("BLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); 
                notifyObservers(DTCCode); 
    }    
}

beim ersten durchgang läufts normal und beim 2ten geht er in die if(hasChanged()) rein, gibt blaaa auch noch aus ABER dann geht er auf notifyObservers und macht gar nix mehr danach ^^ die updateMethoden werden nicht aufgerufen, deshalb macht er nix mehr

kann ma ihn dazu zwingen die updates aufzurufen?
bin langsam echt am verzweifeln ^^
 

Murray

Top Contributor
cmuck hat gesagt.:
beim ersten durchgang läufts normal und beim 2ten geht er in die if(hasChanged()) rein, gibt blaaa auch noch aus ABER dann geht er auf notifyObservers und macht gar nix mehr danach ^^ die updateMethoden werden nicht aufgerufen, deshalb macht er nix mehr

Wenn du beim Debuggen bei notifyObservers stehst - machst du dann "step into"? Kommt er aus dem Methodenaufruf wieder zurück?
Hast du mal Breakpoints auf die beiden Update-Methoden gesetzt?
Kann es sein, dass sich die Observer nach dem ersten Durchgang deregistiert haben? Lass dir doch vor dem Aufruf von notifyObservers() mal das Ergebnis von countObservers() ausgeben.
 

byte

Top Contributor
Oder wird vielleicht irgendwo zwischen setChanged() und notifyObservers() ein clearChanged() aufgerufen?
 
M

maki

Gast
Eine gutes Loggingsystem erspart viel Debugging und Verwunderung.

Meine 0.02 €
 

babuschka

Top Contributor
byto hat gesagt.:
Oder wird vielleicht irgendwo zwischen setChanged() und notifyObservers() ein clearChanged() aufgerufen?
nö, das is ned der fall


Murray hat gesagt.:
Kann es sein, dass sich die Observer nach dem ersten Durchgang deregistiert haben? Lass dir doch vor dem Aufruf von notifyObservers() mal das Ergebnis von countObservers() ausgeben.

wow :roll: countObservers ergab vor notifyObservers folgenedes:
1ter durchgang 2
2ter durchgang 0

es sind tatsächlich keine observers mehr angemeldet....trennt er die automatisch, da ich kein deleteObservers ausführe?
 

babuschka

Top Contributor
Problem gelöst :)

es lag daran, dass ich im code einmal das bestehende observable-objekt neu zuweise ( observable = new observable)
und dann hatte es die observer gelöscht.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
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
G 2 Observable und ein Observer... Allgemeine Java-Themen 4
M MVC: PropertyChangeListener vs Java Observer & Observable Allgemeine Java-Themen 11
S Wie kann ein Observer mehrere Observables beobachten? Allgemeine Java-Themen 9
Z Observer/Observable & Grundlagen Allgemeine Java-Themen 6
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
H Observer und Observable Allgemeine Java-Themen 3
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
G Observer / Observable oder doch lieber Message Broker? Allgemeine Java-Themen 2
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
P Observer/TimerTask Allgemeine Java-Themen 3
P Observer Allgemeine Java-Themen 4
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
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
lhein Tutorial zu Observer / Observable? Allgemeine Java-Themen 6
G problem mit dem observer pattern Allgemeine Java-Themen 3
S Observable und Observer Allgemeine Java-Themen 10
G Frage zu (mehrfachem) Observable/Observer Allgemeine Java-Themen 2
G Frage zum Observer Pattern Allgemeine Java-Themen 4
S Handschrift einlesen & darauf reagieren OCR Allgemeine Java-Themen 2
D mouseWheelMoved => erst reagieren, wenn für 1s das Mausrad nicht mehr benutzt wurde Allgemeine Java-Themen 4
B OOP Auf Zustandsänderungen von Objekten reagieren Allgemeine Java-Themen 2
D auf STRG reagieren befor Grafikkomponente Allgemeine Java-Themen 4
Z Wie auf Fehler reagieren Allgemeine Java-Themen 2
O Auf alle Events reagieren Allgemeine Java-Themen 3
A Auf Zeitpunkt reagieren Allgemeine Java-Themen 6
S JTree selektion erkennen und drauf reagieren Allgemeine Java-Themen 2
M JFileChooser wird rechts oben mit x beendet - wie reagieren? Allgemeine Java-Themen 2
T Java-Applet auf Doppelklick reagieren lassen Allgemeine Java-Themen 2
M Thread überwachen / auf Thread-Tod reagieren Allgemeine Java-Themen 7
G Auf KeyEvent reagieren, wenn das Fenster nicht aktiv ist Allgemeine Java-Themen 8
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
A Zweite Service Klasse beim Kompilieren Allgemeine Java-Themen 6
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
B Stringmanipulationen beim Dateinamen Allgemeine Java-Themen 8
B Woher kommen die Bildschirmkoordinaten beim java Robot? Allgemeine Java-Themen 14
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
J Mein Frame friert ein beim Uploaden Allgemeine Java-Themen 4
P Selenium Scriipt zeigt Fehler beim Import Allgemeine Java-Themen 3
A Hilfe beim Verständnis Allgemeine Java-Themen 16
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
K Verbesserung der Laufzeit beim Sortieren von Einwohnern nach ihrem Geburtsjahr Allgemeine Java-Themen 0
B Compiler-Fehler Probleme beim Kompilieren mit Jsoup Allgemeine Java-Themen 8
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
yakazuqi Fehler beim Laden. JDA (Java Discord API) Allgemeine Java-Themen 1
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
U Fehler beim Compillieren Allgemeine Java-Themen 13
B neuroph hält beim XOR lernen nicht an Allgemeine Java-Themen 13
bueseb84 Fehler beim Import von Maven Dependencies aus lokalem artifactory Allgemeine Java-Themen 2
J Jasper Report - seltame Meldung beim compilieren Allgemeine Java-Themen 3
J Linux .jar beim Start automatisch ausführen Allgemeine Java-Themen 6
T String-Manipulation beim Ablauf in Eclipse und als JAR-File Allgemeine Java-Themen 8
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
L Compiler-Fehler Generics beim Anhängen von Predicates Allgemeine Java-Themen 1
J WARNING: An illegal reflective access operation has occurred, beim Compilieren von JasperReports, was bedeutet das ? Allgemeine Java-Themen 23
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
C Fehler beim Debuggen von Listen Allgemeine Java-Themen 4
L File beim Kopieren in einen anderen Ordner umbenennen Allgemeine Java-Themen 6
B Input/Output Probleme beim Ausführen von Shell-Befehlen mit Java Allgemeine Java-Themen 28
J Probleme beim einbinden von Zip4j library Allgemeine Java-Themen 6
T Compiler-Fehler NoClassDefFoundError beim Laden einer Class Allgemeine Java-Themen 11
S Seitenausrichtung beim Drucken Allgemeine Java-Themen 1
RalleYTN Brauche Hilfe beim Run-Length-Decoding Allgemeine Java-Themen 9
R Optimierung beim Vergleichen von 2 Bildern Allgemeine Java-Themen 23
F SQLite mit Java / Probleme beim INSERT Befehl Allgemeine Java-Themen 4
I Fehler beim Ant-Package erstellen mit Java 9 Allgemeine Java-Themen 1
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
M Beim Öffnen Dialog Directory und Filetype definieren Allgemeine Java-Themen 2
G Problem beim GUI Allgemeine Java-Themen 9
A Probleme beim Verstehen einer Aufgabenstellung Allgemeine Java-Themen 11
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
J Konstruktor in JSP beim Kompilieren nicht gefunden Allgemeine Java-Themen 3
perlenfischer1984 Probleme beim Mocken Allgemeine Java-Themen 6
A Fehler beim Aktualisieren JTable Allgemeine Java-Themen 1
D Pivot-Wahl beim QuickSort steigert die Effizienz, eine Lüge??? Allgemeine Java-Themen 17
J-Gallus Erste Schritte Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis. Allgemeine Java-Themen 9
U Swing Hilfe beim Quellcode für ein Codierungs-/Decodierungsprogramm Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben