2012-01-16 16 views
6

Ho un'applicazione con un JFrame principale che contiene un modello di elenco predefinito. Voglio che se modifico qualcosa su questi record, la seconda applicazione in esecuzione viene automaticamente aggiornata.Java Observer e Observable non funzionano correttamente tra le applicazioni

Finora ho una classe MainController che implementa l'ascoltatore e sovrascrive il metodo di aggiornamento:

public class MainController implements ActionListener, Observer { 
    public void update(Observable o, Object o1) {} 
} 

e una semplice classe che si estende Osservabile

public class Comanda extends Observable{} 

Il mio problema è che se si elimina uno registra dalla prima applicazione, la seconda lista non si aggiorna. Il programma sta eliminando il record dal file di testo ma non sta aggiornando il modello di elenco predefinito. Lo stesso problema con la modifica o l'aggiunta.

Ho provato ad aggiungere "reloadList()" nel metodo di aggiornamento, ma questo non funziona. Idee?

+0

Sarebbe utile se mostri il tuo codice per avviare la notifica degli osservatori. ('Observer' /' Observable' avrebbe dovuto essere deprecato in 1.1 Inoltre userei le classi interne anonime piuttosto che avere una singola classe per svolgere più attività.) –

+0

@ rhose87: * "... per aggiornare la seconda applicazione in esecuzione" * [sic] ... Stai eseguendo ** due diverse applicazioni Java ** e prevedi che l'azione che sta accadendo in una applicazione venga notificata nell'altra !? – TacticalCoder

+0

Seconda applicazione in esecuzione? –

risposta

23

Avete chiamato addObserver su Comanda e aggiunto MainController come Observer? Inoltre, quando si verifica la modifica, stai chiamando setChanged e notifyObservers?

Guardando il codice che hai postato posso vedere che non hai collegato gli oggetti Observer e Observable insieme. Come ho detto, devi chiamare addObserver sull'oggetto Observable, quindi all'interno dell'oggetto Observable, ogni volta che viene apportata una modifica, è necessario chiamare setChanged quindi notifyObservers. Solo quando viene chiamato notifyObservers, verrà chiamato il metodo update di qualsiasi Observer s che è stato aggiunto.

Nella tua domanda hai detto che quando si elimina un record l'elenco non viene aggiornato, il che mi fa pensare che lo Comanda non sia probabilmente lo Object che si desidera Observe. Qualunque oggetto sia che detiene il record List è quello che dovrebbe essere il Observable.

Dai un'occhiata a this per ulteriori informazioni sul modello Osservatore/Osservabile.

+0

Ho pubblicato tutto il mio codice online. Si prega di controllare da [QUI] (http://www.sendspace.com/file/uzeodq) –

2

Quello che stai cercando è chiamato "comunicazione interprocesso" - l'invio di dati da un'applicazione all'altra. Ci sono vari modi per farlo; una ricerca su Google ti darà più informazioni. Observable funziona solo all'interno di una singola applicazione.

Problemi correlati