Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Pattern observer, metodo update() non chiamato

    Salve. Sto implementando il pattern observer ed il problema è che la classe che osserva (la View) sembra non ricevere la notifica di cambiamento (e quindi non invoca update()) da parte di uno specifico oggetto osservabile.

    Arrivo al codice:

    Dove inizializzo il tutto
    codice:
    //creazione oggetti
    GameFrame gameFrame = new GameFrame();
    Player human = new Player("Prova");
    Player computer = new Player();
    Table table = new Table();
    GameModel model = new GameModel(human, computer, table);
                    
    human.addObserver(gameFrame);
    computer.addObserver(gameFrame);
    model.addObserver(gameFrame);
                    
    GameController.getInstance().setModel(model);
    GameController.getInstance().setView(gameFrame);    
                    
    gameFrame.setVisible(true);
    dispose();
    Le classi Player, Table e GameModel estendono Observable. GameModel inizializza il tutto, al termine del quale effettua la notifica:

    codice:
    //ci sono varie operazioni prima...
    Message message = new Message(Message.initialization);
    setChanged();
    notifyObservers(message);
    Message
    codice:
    public class Message {
    
    
        private String mex;
        
        public static final String initialization = "initialization";
        
        public Message(String m) {
            mex = m;
        }
        
        @Override
        public String toString() {
            return mex;
        }
    }
    Ovviamente la view implementaObserver e definisce il metodo update().

    Ho inserito una normale println dentro il metodo update() che viene correttamente eseguita
    se la notifica arriva dalla classe Playel. Non viene stampato nulla se la notifica arriva dalla classe GameModel.​ Why?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Javino89 Visualizza il messaggio
    GameModel inizializza il tutto, al termine del quale effettua la notifica
    Se fa questo nel costruttore, non vedo come possano essere notificati gli observer .... visto che non sono ancora registrati!

    EDIT: mi riferisco ovviamente a quel:
    model.addObserver(gameFrame);
    che è fatto appunto dopo.
    Ultima modifica di andbin; 26-05-2014 a 23:33
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ovvio, hai ragione -.- Allora l'inizializzazione lo creo come metodo pubblico e lo chiamo dall'esterno dopo aver registrato l'observer. Non vedo altra soluzione per ora, grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.