Observer Pattern used with Java socket programing not working -


i have problem observer pattern when i'm trying update client view based on data comes server.

the code sends messages client:

package model;  import java.io.bufferedreader; import java.io.ioexception; import java.io.inputstreamreader; import java.io.printwriter; import java.net.socket;  public class playerthread extends thread{ private bufferedreader infromclient; private printwriter outtoclient; private socket socket;  public playerthread(socket socket) throws ioexception{     this.socket = socket;     infromclient = new bufferedreader(new inputstreamreader(socket.getinputstream()));     outtoclient = new printwriter(socket.getoutputstream(), true);      outtoclient.println("hey"); }  public void run(){     // needs implemented } } 

the code takes care of recieving data on client side:

package connection;  import java.io.bufferedreader;  import mediator.modelmanager;  public class clientrecieverthread extends thread {  private modelmanager model; private bufferedreader infromserver;  public clientrecieverthread(modelmanager model, bufferedreader infromserver) {     this.model = model;     this.infromserver = infromserver; }  @override public void run() {      string message = null;     try {         while (true) {             message = infromserver.readline();             //system.out.println(message);             model.setmessage(message);         }     } catch (exception e) {      } } 

}

and code contains observer pattern use on client side:

package model; public class messagehandler { private string message;  public messagehandler(){     message = "welcome"; }  public void setmessage(string message){     this.message = message; }  public string getmessage(){     return this.message; } }  package mediator;  import java.io.ioexception; import java.net.unknownhostexception; import java.util.observable;  import model.messagehandler; import connection.proxy;  public class modelmanager extends observable{ private messagehandler messagehandler; private proxy proxy; // establish connection server  public modelmanager() throws unknownhostexception, ioexception{     proxy = new proxy(this);     messagehandler = new messagehandler(); }  public synchronized void setmessage(string message){     setchanged();     messagehandler.setmessage(message);     notifyobservers(message); }  public string getmessage(){     return messagehandler.getmessage(); }  public void send(string message){     proxy.send(message); } }    package view; import java.awt.borderlayout; import java.awt.graphics; import java.awt.graphics2d; import java.awt.rectangle; import java.util.observable; import java.util.observer;  import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.swingconstants;  import model.board;  public class view extends jpanel implements observer{ private jframe frame; private board board; private rectangle[][] squares; private jlabel messagelabel;  public view(){     initcomponents();     initvariables();     addcomponents(); }  private void initcomponents() {     frame = new jframe("tictactoe");     frame.setsize(500, 500);     frame.setdefaultcloseoperation(jframe.exit_on_close);     frame.setlocationrelativeto(null);      messagelabel = new jlabel("");     messagelabel.sethorizontalalignment(swingconstants.center);     messagelabel.setverticalalignment(swingconstants.center);      this.setsize(300,300);     }  private void initvariables() {     board = new board(3,3, 100);      squares = new rectangle[board.getrow()][board.getcol()];     (int = 0; < squares.length; i++){         (int j = 0; j < squares[i].length; j++){             squares[i][j] = new rectangle();         }     } }  private void addcomponents() {     frame.add(messagelabel, borderlayout.north);     frame.add(this);      frame.setvisible(true); }   private void drawboard(graphics g, board board) {     int positionx = this.getwidth()/2 - (board.getcellsize() + board.getcellsize()/2);     int positiony = 50;      graphics2d g2d = (graphics2d) g;      (int = 0; < board.getrow(); i++) {         (int j = 0; j < board.getcol(); j++) {              squares[i][j] = new rectangle(positionx, positiony, 100, 100);             positionx += 100;              g2d.draw(squares[i][j]);         }         positiony += board.getcellsize();         positionx = this.getwidth()/2 - (board.getcellsize() + board.getcellsize()/2);     } }  public void paintcomponent(graphics g){     drawboard(g, board); }   public void update(observable o, object arg) {     system.out.println((string)arg); }   } 

the connection between modelmanager , view done in controller class (model.addobserver(view));

the prolem don't understand why view doesn't updated, although data gets recieved client.

thank in advance! :)

you need call method notifyobservers(); when model changed, notify observers added model.

so inside setmessage(string message), coding:

if(this.message!=message){    this.message = message;    notifyobservers(); } 

Comments

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -

The canvas has been tainted by cross-origin data in chrome only -