Observer funktioniert nicht. Sehe keine Fehler

Status
Nicht offen für weitere Antworten.

richardkrieger

Aktives Mitglied
Hallo,

verstehe nicht, was ich falsch mache. Es ist ein JDialog, wo Datenbankinhalt gezeigt wird. In diesem JDialog gibt es ein JButton "Neu" zum anlegen eines neuen Datensatzes. "Neu" öffnet noch ein JDialog, wo man einzelne Werte eintragen kann. Wenn man dann auf "OK" klickt, werden die Daten in die DB geschrieben, das erste JDialog sollte benachrichtigt werden und Tabelle neu einlesen.
Code des ersten JDialogs:
Code:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class DBFenster extends JDialog implements ActionListener,Observer{
	
	private static final long serialVersionUID = 6820490495593525796L;
	private Init ini=new Init();
	private MySQLHaendler mysql=new MySQLHaendler();
	private int dbnummer;
	private String tabname;
	private DefaultTableModel tabmodel;
	private JTable tabelle;
	private JButton btneu=new JButton("Neu");
	private JButton btbearb=new JButton("Bearbeiten");
	private JButton btdel=new JButton("Löschen");
	private JButton btdelall=new JButton("Alle löschen");
	private JButton btabbrechen=new JButton("Schliessen");
	private JComboBox sortbox;
	private String sql;
	private String[] tueber;
	private DSNeu satzneu;
	

	public DBFenster(int dbnr){
		dbnummer=dbnr;
		String[][] tabnamen=ini.getTABNamen();
		tabname=tabnamen[dbnummer][0];
		tueber=ini.getTabhead(dbnummer);
		this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		this.setModalityType(ModalityType.APPLICATION_MODAL);
		this.setLayout(new BorderLayout());
		this.add(this.getOben(),BorderLayout.NORTH);
		this.tabFuellen();
		this.add(this.getMitte(),BorderLayout.CENTER);
		this.add(this.getUnten(),BorderLayout.SOUTH);
		this.tabFuellen();
		this.pack();
		this.setVisible(true);
	}
	
	private void tabFuellen(){
		tabmodel=new DefaultTableModel(tueber,0);
		sql="SELECT id,";
		for(int i=0;i<tueber.length;i++){
			sql+=tueber[i].toLowerCase()+",";
		}
		sql=sql.substring(0, sql.length()-1);
		sql+=" FROM "+tabname+" ORDER BY "+tueber[0].toLowerCase();
		Vector<String[]> resultat=mysql.getDaten(sql,tueber);
		for(int i=0;i<resultat.size();i++){
			tabmodel.addRow(resultat.get(i));
		}
	}
	
	private JPanel getOben(){
		JPanel rgwert=new JPanel(new BorderLayout());
		String[][] tabnamen=ini.getTABNamen();
		String toben=" Datenbank "+tabnamen[dbnummer][1];
		rgwert.add(new JLabel(toben),BorderLayout.WEST);
		JPanel sortp=new JPanel(new FlowLayout(FlowLayout.RIGHT));
		sortp.add(new JLabel("Sortieren nach: "));
		sortbox=new JComboBox(ini.getTabhead(dbnummer));
		sortp.add(sortbox);
		rgwert.add(sortp,BorderLayout.EAST);
		return rgwert;
	}
	
	private JPanel getMitte(){
		JPanel rgwert=new JPanel(new BorderLayout());
		JScrollPane scroll=new JScrollPane();
		tabelle=new JTable(tabmodel);
		scroll.getViewport().add(tabelle);
		rgwert.add(scroll,BorderLayout.CENTER);
		return rgwert;
	}
	
	private JPanel getUnten(){
		JPanel rgwert=new JPanel(new FlowLayout(FlowLayout.RIGHT));
		btneu.setActionCommand("neu");
		btneu.addActionListener(this);
		rgwert.add(btneu);
		rgwert.add(btbearb);
		rgwert.add(btdel);
		rgwert.add(btdelall);
		btabbrechen.setActionCommand("abbrechen");
		btabbrechen.addActionListener(this);
		rgwert.add(btabbrechen);
		return rgwert;
	}

	@Override
	public void actionPerformed(ActionEvent ae) {
		if(ae.getActionCommand().equals("neu")){
			satzneu=new DSNeu(dbnummer); // Fenster für Eingabe
			satzneu.addObserver(this);
		}
		else if(ae.getActionCommand().equals("abbrechen")){
			this.dispose();
		}
	}

	@Override
	public void update(Observable obs, Object obj) {
		System.out.println("update");  // erscheint nicht
		if(obj.equals("neu")){
			System.out.println("if neu"); // erscheint natürlich auch nicht
			satzneu.deleteObserver(this);
			this.tabFuellen();
		}
	}
}


Fenster für die Eingabe(DSNeu):
Code:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class DSNeu extends Observable implements ActionListener{
	
	private JDialog dialog=new JDialog();
	private int dbnummer;
	private Init ini=new Init();
	private JButton ok=new JButton("OK");
	private JButton abbrechen=new JButton("Abbrechen");
	private String[] kopf;
	private Vector<JTextField> eingabe=new Vector<JTextField>();
	private String[][] tabnamen;
	private MySQLHaendler mysql=new MySQLHaendler();
	
	public DSNeu(int nr){
		dbnummer=nr;
		kopf=ini.getTabhead(dbnummer);
		tabnamen=ini.getTABNamen();
		String toben=" Neu für Datenbank "+tabnamen[dbnummer][1];
		dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		dialog.setModalityType(ModalityType.APPLICATION_MODAL);
		dialog.setLayout(new BorderLayout());
		dialog.add(new JLabel(toben),BorderLayout.NORTH);
		dialog.add(this.getFelder(),BorderLayout.CENTER);
		dialog.add(this.getButtons(),BorderLayout.SOUTH);
		dialog.pack();
		int hoehe=dialog.getHeight();
		int breite=Toolkit.getDefaultToolkit().getScreenSize().width;
		dialog.setSize(breite,hoehe);
		dialog.setVisible(true);
	}
	
	private JPanel getFelder(){
		JPanel rgwert=new JPanel(new GridLayout(0,kopf.length));
		for(int i=0;i<kopf.length;i++){
			rgwert.add(new JLabel(kopf[i]));
			eingabe.add(new JTextField());
		}
		for(int i=0;i<eingabe.size();i++){
			rgwert.add(eingabe.get(i));
		}
		return rgwert;
	}
	
	private JPanel getButtons(){
		JPanel rgwert =new JPanel(new FlowLayout(FlowLayout.RIGHT));
		ok.setActionCommand("ok");
		ok.addActionListener(this);
		rgwert.add(ok);
		abbrechen.setActionCommand("abbrechen");
		abbrechen.addActionListener(this);
		rgwert.add(abbrechen);
		return rgwert;
	}

	@Override
	public void actionPerformed(ActionEvent ae) {
		if(ae.getActionCommand().equals("ok")){
			String anfrage="INSERT INTO ";
			anfrage+=tabnamen[dbnummer][0]+"(";
			for(int i=0;i<kopf.length;i++){
				anfrage+=kopf[i]+",";
			}
			anfrage=anfrage.substring(0, anfrage.length()-1);
			anfrage+=") VALUES (";
			for(int i=0;i<eingabe.size();i++){
				anfrage+="'"+eingabe.get(i).getText()+"'"+",";
			}
			anfrage=anfrage.substring(0, anfrage.length()-1);
			anfrage+=")";
			mysql.insertNeu(anfrage);
			System.out.println("setChanged");
			this.setChanged();
			System.out.println("notifyObservers");
			this.notifyObservers("neu");
			System.out.println("dispose");
			dialog.dispose();
			System.out.println("ok ende");
		}
		else if(ae.getActionCommand().equals("abbrechen")){
			dialog.dispose();
		}
	}
}

was habe ich übersehen?
 

byte

Top Contributor
In DSNeu wird ein modaler Dialog im Konstruktor angezeigt. IIRC blockiert der Event Dispatch Thread, sobald dialog.setVisible(true); passiert. Zu diesem Zeitpunkt ist der Observer aber noch nicht hinzugefügt. Deswegen wird er auch nie benachrichtigt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Observer funktioniert nicht Java Basics - Anfänger-Themen 13
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