observer

Status
Nicht offen für weitere Antworten.

nibblas

Aktives Mitglied
moin

ich möchte mein gui über änderungen der verarbeitenden klasse informieren.

dazu möchte ich die observer design pattern einsetzen.
ich habe mir die FAQ zu observer hier im forum gelesen und probiert das ganze zu implementieren.

hier meine 3 klassen.

Rfid_read oberservable
Code:
public class Rfid_read extends Observable {

	private Timer Read = new Timer( 250, new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { try {
		jReadTimer();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} } } );
	
	
	//Geräte beziehen
	public String jReadTimer() throws SQLException
	{
		TMedioLx00BufferEntry myTag = new TMedioLx00BufferEntry(); //null;
		boolean boContinue = false;
		String taginfo = null;
		int iMaxScans = 1;
		
		 		
		// While there are tags in reader's buffer
		while( iMaxScans-- != 0 )
		{
			try
			{
				boContinue = lx00Reader.getBufferEntry(
														true,	// Do not clear reader buffer after tag id extraction
														myTag	// MedioLx00Tag object
														);
			}
			catch( TSTXeErrorException e )
			{
				Read.stop();
				 
			}
										  		
			if( !boContinue )
				break;
			
//			System.out.println(myTag.getTagTypeAsString());
//			System.out.println(myTag.getChannelAsString());
//			System.out.println(myTag.getDataAsString());
			
			Toolkit.getDefaultToolkit().beep();
			taginfo = myTag.getDataAsString();
			Read.stop();
		}
		setChanged();
		notifyObservers(taginfo);
		return taginfo;
	}   
	//---------------------------------------------------------------
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		
		

	}

}

hier der observer das GUI

Code:
public class MatisseGui extends javax.swing.JFrame implements Observer {

	
	private String rfidtag = null;

	public MatisseGui() throws ClassNotFoundException, SQLException {
		initComponents();
	}


	private void initComponents() {


              //alle gui komponente

		
		pack();
	}// </editor-fold>
	//GEN-END:initComponents

	 */
	public static void main(String args[]) {
		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					new MatisseGui().setVisible(true);
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
	}

	
	public void update(Observable o, Object arg) {
		// TODO Auto-generated method stub
		this.setRfidtag(arg.toString());
		this.textDeviceid.setText(arg.toString());
	}

}

und die controller klasse

Code:
public class GuiController {

	/**
	 * @param args
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 */
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		MatisseGui test = new MatisseGui();
		Rfid_read read = new Rfid_read();
		read.addObserver(test);
		

	}

}


hmm scheint aber noch net korrekt zu sein.. was mache ich falsch??

gruss nibblas
 

nibblas

Aktives Mitglied
ach so ihr könnt mit meiner fehler beschreibung nix anfangen....

sorry jungs :oops:

das problem ist folgendes dass die Rfid_read klasse daten aus dem puffer des RFID Lesegerätes ausliest, um diese daaten in das gui zu bekommen habe ich das observe pattern als lösung gesehen und probiert das zu implementieren...

nur wird die Update methode gar nie aufgerufen....

muss ich ein objekt von der klasse GuiController instanzieren?
hab da den durchblick noch net....

die Rfid klasse denke ich ist das setChanged() und notify korrekt implementiert... im gui ist die methode Update ebenfalls korrekt enhalten.... müsste das problem beim controller liegen...
 
G

Gast

Gast
also bei dir fehlt definitiv das setzten der "dirty flag" für den Observerable. (setChanged();)

Was sonst noch nicht geht ist etwas schwer zu definieren, da dein Code nicht kommentiert und voll mit überflüssigem Zeug ist.

Hoffe es hilft dennoch
 

nibblas

Aktives Mitglied
doch die methode an sich wird aufgerufen... die daten vom RFID lesegerät werden übertragen und der beep wird auch ausgegeben...

ich habe zu testzwecken in der update methode eine system.print eingebaut... die update methode wird wohl gar nicht aufgerufen...
 

Marco13

Top Contributor
Ja, da das jetzt keiner Testen kann (und ich versichere dir: Jedes KSKB/Tesprogramm, dass jetzt irgendjemand hier posten könnte, würde funktionieren) bleibt dir wohl nichts anderes als Debug-Ausgaben. In der jReadTimer-Methode am Anfang
System.out.println("Fange an");
und am Ende

System.out.println("Notifye "+countObservers()+" observer");
setChanged();
notifyObservers(taginfo);

.. usw.
 

nibblas

Aktives Mitglied
keine observer... 0...

liegt das problem daran dass ich im gui zu beginn bereits eine instanz der Rfid_read klasse erstelle? der observer obvserviert ja dabei das objekt read.

da ich im gui über einen action event eines buttons die read funktion aufrufe, benötige ich ja schon ein objekt der rfid klasse...


hier mein gekürzte gui klasse.

Code:
package Observer;

import java.util.Observable;
import java.util.Observer;

import com.tagsys.protocol.stxe.TSTXeErrorException;

/**
 *
 * @author  __USER__
 */
public class minigui extends javax.swing.JFrame implements Observer {

	/**
	 * 
	 */
	
	private final Rfid_read Read = new Rfid_read();
	
	
	private static final long serialVersionUID = 1L;

	/** Creates new form minigui */
	public minigui() {
		initComponents();
	}

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	//GEN-BEGIN:initComponents
	// <editor-fold defaultstate="collapsed" desc="Generated Code">
	private void initComponents() {

		jTextField1 = new javax.swing.JTextField();
		jButton1 = new javax.swing.JButton();

		setDefaultCloseOperation(3);

		jTextField1.setText("jTextField1");

		jButton1.setText("jButton1");
		jButton1.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				jButton1ActionPerformed(evt);
			}
		});

		org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(
				getContentPane());
		getContentPane().setLayout(layout);
		layout
				.setHorizontalGroup(layout
						.createParallelGroup(
								org.jdesktop.layout.GroupLayout.LEADING)
						.add(
								layout
										.createSequentialGroup()
										.add(75, 75, 75)
										.add(
												layout
														.createParallelGroup(
																org.jdesktop.layout.GroupLayout.LEADING)
														.add(jButton1)
														.add(
																jTextField1,
																org.jdesktop.layout.GroupLayout.PREFERRED_SIZE,
																187,
																org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
										.addContainerGap(138, Short.MAX_VALUE)));
		layout.setVerticalGroup(layout.createParallelGroup(
				org.jdesktop.layout.GroupLayout.LEADING).add(
				layout.createSequentialGroup().add(66, 66, 66).add(jTextField1,
						org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 74,
						org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).add(41,
						41, 41).add(jButton1).addContainerGap(96,
						Short.MAX_VALUE)));

		pack();
	}// </editor-fold>
	//GEN-END:initComponents

	private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
		try {
			Read.ConnectReader();
		} catch (TSTXeErrorException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			Read.startRead();
		} catch (TSTXeErrorException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * @param args the command line arguments
	 */
	public static void main(String args[]) {
		java.awt.EventQueue.invokeLater(new Runnable() {
			public void run() {
				new minigui().setVisible(true);
			}
		});
	}

	//GEN-BEGIN:variables
	// Variables declaration - do not modify
	private javax.swing.JButton jButton1;
	private javax.swing.JTextField jTextField1;

	// End of variables declaration//GEN-END:variables

	public void update(Observable arg0, Object arg1) {
		System.out.println("jap es geht");

	}

}
 

Marco13

Top Contributor
Hm. Noch ein paar Posts, und das chaos ist komplett. Wo liegt dann nun die Instanz, die observiert werden soll? Im GUI oder im Controller? Was macht die Methode startRead? ... Poste ein kleines Beispiel, das COMPILERBAR und LAUFFÄHIG ist, und das nicht funktioniert (für den ganzen RFID-Lese-Mist kannst du "Leere" Dummy-Methoden einbauen). Du kannst davon ausgehen, dass die erste Antwort, die du dann erhältst, das Problem löst.
 

nibblas

Aktives Mitglied
hat sich schon gelöst... mal ein wenig an die frische luft und den kopf frei bekommen.. hab da ein riesen stuss abgelassen....

klart hats net funktioniert... ich hab auch das falsche objekt observiert gehabt...
geht nun...

thx trotzdem
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
N Observer funktioniert nicht Java Basics - Anfänger-Themen 13
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
R Observer funktioniert nicht. Sehe keine Fehler 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
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

Ähnliche Java Themen

Neue Themen


Oben