2012-01-16 19 views
6

我有一個包含默認列表模型的主JFrame應用程序。我希望如果我修改這些記錄上的某些內容,第二個運行的應用程序會自動更新。Java Observer和Observable在應用程序之間無法正常工作

到目前爲止,我有這實現監聽,並覆蓋更新方法的MainController類:

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

和延伸可觀察

public class Comanda extends Observable{} 

我的問題一個簡單的類是,如果我刪除一個從第一個應用程序記錄,第二個列表不更新。該程序正在從文本文件中刪除記錄,但未更新默認列表模型。編輯或添加時出現同樣的問題。

我試圖在update方法中添加「reloadList()」,但這不起作用。想法?

+0

如果您顯示開始觀察者通知的代碼,這將很有用。 ('Observer' /'Observable'確實應該在1.1中被棄用,我也會使用匿名內部類而不是讓一個類完成多個任務。) – 2012-01-16 00:15:23

+0

@ rhose87:*「...更新第二個正在運行的應用程序」 * [原文如此] ...您正在運行**兩個不同的Java應用程序**,並期望在另一個應用程序中發生的操作在另一個應用程序中發生通知! – TacticalCoder 2012-01-16 00:15:53

+0

第二次運行的應用程序? – 2012-01-16 00:17:33

回答

23

您是否在Comanda上調用addObserver,並將MainController添加爲Observer?另外,如果發生更改,請致電setChangednotifyObservers

看着你發佈的代碼,我可以看到你沒有連接ObserverObservable對象。正如我所說,您必須在您的Observable對象上撥打addObserver,然後在您的Observable對象內,每當進行更改時,您需要致電setChanged,然後notifyObservers。只有當調用notifyObservers時,纔會調用已添加的任何Observerupdate方法。

您在您的問題中說,當您刪除一條記錄時,列表不會更新,這使我認爲Comanda可能不是Object,您希望Observe。無論那個對象是List的記錄,應該是Observable

查看關於Observer/Observable模式的更多信息,請看this

+0

我在網上發佈了我的所有代碼。請從[這裏](http://www.sendspace.com/file/uzeodq) – 2012-01-16 06:42:15

2

你正在試圖將它稱爲「進程間通信」 - 將數據從一個應用程序發送到另一個應用程序。有很多種方法可以做到這一點;谷歌搜索會給你更多的信息。 Observable只適用於單個應用程序。

相關問題