Observer funktioniert nicht

Nemesys88

Bekanntes Mitglied
Hallo zusammen!

Habe eine Klasse A mit einem Label, das ich in Klasse D updaten möchte.
Würde das wenns geht am liebsten mit einem Observer machen, der will aber noch nicht so wie ich... :D

Die Klassen mit dem Observer-relevanten Code:

Java:
public class MainFrame extends JFrame implements Observer
... 
	@Override
	public void update(Observable o, Object text) {
		label1.setText((String) text);
	}

Java:
public class Data extends Observable
...
				String text = "Summe ECTS: " + berechne_summe() + "               " + "Notendurchschnitt: " +  Math.round(berechne_durchschnitt() * 100. ) / 100.;
				
				setChanged();
				notifyObservers(text);

Was fehlt hier jetzt noch ?
addObserver in der ersten Klasse?
Wie muss der aussehen ?

Danke schonmal. :)
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter
Du musst schon noch deinem Observable den Observer hinzufügen.

Java:
 observable.addObserver(...);
 

Nemesys88

Bekanntes Mitglied
Sorry wenn ich nochmal so doof fragen muss, aber wie muss der aussehen ?

Ich hab im Konstruktor von MainFrame jetzt stehen:

Java:
Data daten = new Data();
daten.addObserver(this);

Da sich aber immernoch nichts tut, geh ich davon aus, dass das so nicht richtig sein kann... :/
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter
So ich hab dir mal ein kleines KSKB zusammengestellt, wie was wann abläuft:

Java:
import java.util.Observable;
import java.util.Observer;

public class MyObserver implements Observer {
  
  public static void main(String[] args) {
    MyObserver observer = new MyObserver();
    MyObservable observable = new MyObservable(10);
    observable.addObserver(observer);
    
    observable.setX(12);
  }
  
  @Override
  public void update(Observable o, Object arg) {
    if (o instanceof MyObservable) {
      System.out.println("x has changed from " + arg + " to " + ((MyObservable) o).getX() + "!");
    }
  }
  
  static class MyObservable extends Observable {
    private int x;
    
    public MyObservable(int x) {
      this.x = x;
    }
    
    public void setX(int x) {
      int oldX = this.x;
      this.x = x;
      setChanged();
      notifyObservers(oldX);
    }
    
    public int getX() {
      return x;
    }
  }
}
 

Nemesys88

Bekanntes Mitglied
Also meiner Meinung nach hab ich jetzt alles genau so gemacht und trotzdem funktioniert es nicht...

Java:
public class Data extends Observable
...
String text = "blabla";

setChanged();
notifyObservers(text);

public class MainFrame extends JFrame 
...
Data daten = new Data();
MyObserver watcher = new MyObserver(label1);
daten.addObserver(watcher);

public class MyObserver implements Observer {
	
	private JLabel label1;

	public MyObserver(JLabel _label) {
		label1 = new JLabel();
		label1 = _label;
	}

	@Override
	public void update(Observable o, Object arg) {
		label1.setText("hallo");
	}

}
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter
Was passiert wenn du dein Label änderst und dann die Größe des Frames veränderst? Aktualisiert sich dein Label? Wenn ja dann fehlt dir nur noch ein refresh auf dein label/frame.
 

Nemesys88

Bekanntes Mitglied
Nein leider nicht... :/

Mir fällt auch auf, dass er garnicht in die Update-Funktion springt!

Wenn ich da in die erste Zeile ein System.out.println("test") mache wird das niemals ausgegeben.
 

Nemesys88

Bekanntes Mitglied
Java:
import java.util.Observable;
import java.util.Observer;

import javax.swing.JLabel;

public class MyObserver implements Observer {
	
	private JLabel label1;

	public MyObserver(JLabel _label) {
		label1 = new JLabel();
		label1 = _label;
	}

	@Override
	public void update(Observable o, Object arg) {
		System.out.println("test");
		label1.setText("hallo");
	}

}

Java:
public class Data extends Observable
...
public void read() {

				String text = "Summe ECTS: " + berechne_summe() + "               " + "Notendurchschnitt: " +  Math.round(berechne_durchschnitt() * 100. ) / 100.;

				setChanged();
				notifyObservers(text);
			   }

Code:
public class MainFrame extends JFrame
MainFrame() {
...
		Data daten = new Data();
		daten.read();

		// adds Label
		label1 = new JLabel();
		label1.setText(("Summe ECTS: " + daten.berechne_summe() + "               " + "Notendurchschnitt: " +  Math.round( daten.berechne_durchschnitt() * 100. ) / 100.));
		label1.setHorizontalAlignment(SwingConstants.CENTER);
		label1.setBorder(new LineBorder(Color.BLACK));
		add(label1,BorderLayout.SOUTH);
		
		MyObserver watcher = new MyObserver(label1);
		daten.addObserver(watcher);
...


Die Observer-Klasse ist so komplett, die andern sind leider viel zu groß um sie komplett zu posten, die Data.java hat 400 Zeilen Code... ;)
Die Data.java hat halt ne Methode read() die an vielen Stellen im Programm aufgerufen wird, halt zb. im Konstruktor von MainFrame (= Programmstart).
Im selbigen Konstruktor konstruiere ich auch das Label das ich der neuen "MyObserver"-Klasse mitgegeben habe.
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter
Du solltest vorher schon deinen Observer setzen bevor du read aufrufst.

Und du brauchst in dem Konstruktor deines Observers kein neues JLabel erstellen, sondern nur übergeben.
 

Nemesys88

Bekanntes Mitglied
Ok
Java:
		MyObserver watcher = new MyObserver(label1);
		daten.addObserver(watcher);
		
		daten.read();
funktioniert dann, aber leider nur für den Programmstart...

Wenn ich aus Klasse C jetzt daten.read() aufrufe passiert aber immer noch nichts,
und ich kann auch keinen watcher definieren,
weil Klasse C das Label ja garnicht kennt...

Im Endeffekt hab ich also rein garnichts gewonnen...

Ich hab nach wie vor das Problem, das Klasse C das Label aus Klasse A (= MainFrame) nicht kennt... :(

edit: Ich hatte eigentlich gehofft mit dem Observer das Problem lösen zu können, das das Label in jeder Klasse bekannt sein muss, in der ich es ändern will...
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter
Ich kann dir sagen, dass es, wenn es sauber implementiert ist auch so funktioniert. Aber dein Fehler liegt nicht in dem was du geschrieben hast, sondern in einem anderen Teil. Wenn du willst kannst du mir eine PN senden mit deinem ganzen Code und ich schau mal nach was es da haben kann.
 

Joose

Top Contributor
[ot]@Nemesys88: Bitte verwende in Zukunft die
Java:
-Tags für Java-Code, danke! :)[/ot]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Observer funktioniert nicht. Sehe keine Fehler Java Basics - Anfänger-Themen 2
J Methoden Observer-Pattern mit Consumer und accept( ) Java Basics - Anfänger-Themen 6
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
fLooojava MVC Pattern und Observer Pattern Java Basics - Anfänger-Themen 6
Y Observer update Java Basics - Anfänger-Themen 3
G Observer löst zweimal aus Java Basics - Anfänger-Themen 8
A ein observer "post"problem Java Basics - Anfänger-Themen 3
A Observer Pattern Problem Java Basics - Anfänger-Themen 15
J Interface Frage zu Interfces am Beispiel Observer Pattern Java Basics - Anfänger-Themen 8
F Observer Java Basics - Anfänger-Themen 7
U observer thread safe Java Basics - Anfänger-Themen 4
Helgon Observer Pattern - hasChanged() immer false Java Basics - Anfänger-Themen 10
B Wozu Observer? Java Basics - Anfänger-Themen 9
Spin Observer Patteern java Java Basics - Anfänger-Themen 7
O Liste - Observer/Observeable - HashMap Hilfe Java Basics - Anfänger-Themen 19
C OOP Observer Pattern Java Basics - Anfänger-Themen 2
O Observer - Einfach erklärt? Java Basics - Anfänger-Themen 5
K Observer Pattern notifyObservers Java Basics - Anfänger-Themen 9
P Fragen zum Observer Muster und Datenbanken Java Basics - Anfänger-Themen 2
T Observer ansprechen Java Basics - Anfänger-Themen 2
W Observer-Pattern Java Basics - Anfänger-Themen 3
hdi JList mit Model und Observer -> Chaos, blicke nicht durch Java Basics - Anfänger-Themen 22
hdi Observer als statische Klasse ? Java Basics - Anfänger-Themen 2
N observer frage Java Basics - Anfänger-Themen 2
G Implementierung des Observer/Observable Patterns - Gut so? Java Basics - Anfänger-Themen 3
N observer Java Basics - Anfänger-Themen 12
H [erledigt] Observable/Observer Beobachter entfernen Java Basics - Anfänger-Themen 2
G Unterschied Observer&Observable<->java.beans.Prope Java Basics - Anfänger-Themen 4
G Benötige Hilfe bei Problem mit Observer! Java Basics - Anfänger-Themen 2
E Observer Java Basics - Anfänger-Themen 7
K Observer Observable update() . Java Basics - Anfänger-Themen 13
T Verständnisfrage Observer-Pattern Java Basics - Anfänger-Themen 8
Y Observer - notifyObservers(Object arg) Java Basics - Anfänger-Themen 4
M Servlets und Observer Java Basics - Anfänger-Themen 2
G Observable/Observer-Patterns Java Basics - Anfänger-Themen 9
S Observer Pattern notifyObserver Java Basics - Anfänger-Themen 6
M Observer Pattern Java Basics - Anfänger-Themen 14
A MVC Observer Pattern Java Basics - Anfänger-Themen 2
G Observable/Observer update wird nicht ausgeführt Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
Garrit1994 Continue funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
B Methoden Übergebe Variabel funktioniert nicht Java Basics - Anfänger-Themen 17
P exportiertes Programm funktioniert nur teilweise Java Basics - Anfänger-Themen 7
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
Fugover Programm funktioniert nicht Java Basics - Anfänger-Themen 11
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
berserkerdq2 wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun? Java Basics - Anfänger-Themen 11
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein Programm nicht Java Basics - Anfänger-Themen 2
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
sserio Größtes Palindrom-Produkt Programm funktioniert nur halb Java Basics - Anfänger-Themen 23
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
U Wie genau funktioniert der ! Operator Java Basics - Anfänger-Themen 3
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
M Java printf(Locale.... funktioniert nicht Java Basics - Anfänger-Themen 3
N Wieso funktioniert die Deklaration nicht Java Basics - Anfänger-Themen 3
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
districon Backtracking funktioniert nicht ganz Java Basics - Anfänger-Themen 3
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
S Schleife funktioniert nicht Java Basics - Anfänger-Themen 2
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
Henri Webservice Delete und Update Methode funktioniert nicht Java Basics - Anfänger-Themen 27
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
JD_1998 Hilfsmethode if return funktioniert nicht Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
T % funktioniert nicht Java Basics - Anfänger-Themen 2
D e(fx)clipse installieren funktioniert nicht Java Basics - Anfänger-Themen 3
D GPIO Nutzung mit Pi4J Library auf Raspberry funktioniert nicht Java Basics - Anfänger-Themen 3
F Java GUI-PaintComponent funktioniert nicht Java Basics - Anfänger-Themen 1
J equals funktioniert nicht - Warum Java Basics - Anfänger-Themen 13
L hilfe run button funktioniert nicht Java Basics - Anfänger-Themen 13
I Array funktioniert nicht. Java Basics - Anfänger-Themen 2
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
V_Fynn03 Erste Schritte BubbleSort Quelltext funktioniert noch nicht Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
R Erste Schritte Eclipse - Java - System.out.println(); funktioniert nicht Java Basics - Anfänger-Themen 2
G Programm mit Schleife funktioniert nicht Java Basics - Anfänger-Themen 5
T Redirect funktioniert nicht Java Basics - Anfänger-Themen 3
R Mein Plugin funktioniert nicht? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben