2013-05-30 129 views
0

我在Swing中編寫簡單的對等服務器對等聊天應用程序。在客戶端,有一個負責客戶端 - 服務器通信的'客戶'對象和'MainWindow',這是一個主要的jForm。在Swing應用程序中的組件之間進行通信

收到消息後,'客戶端'需要通知'MainWindow'關於新消息。然而,'MainWindow'是在程序開始時創建的一個對象(在我創建'Client'之後),所以我正在尋找一種將'MainWindow'引用傳遞給'Client'的方法。

我正在考慮創建'資源'類與靜態引用我需要在我的應用程序中進行通信的對象,但它看起來不是很優雅。

有沒有更好的方法來做到這一點?

+0

你能提供你試過的代碼嗎? –

+0

你會想要使用[觀察者模式](http://en.wikipedia.org/wiki/Observer_pattern)。這在Swing中是一種常見的方法,所以您需要了解它;)。這也意味着'Client'不需要知道(直接)關於'MainWindow',bu可以提供一個回調接口,MainWindow'可以註冊到... – MadProgrammer

+0

10這就是它的樣子:AuthWindow啓動'Client'對象,它實現了Runnable,然後調用'MainWindow': –

回答

0
public interface MessageListener { 
    public void notify(Message msg); 
} 

public class MainWindow implements MessageListener { 
    public void notify(Message msg) { 
     // UI Action 
    } 
} 

public class Client { 
    private MessageListener listener; 

    public void setMessageListener(MessageListener listener) { 
     this.listener = listener; 
    } 
} 

您可以使用類似的東西來發布訂閱模式,其中MainWindow。贊同出版商Client,並從客戶端,只要你得到一個消息,可以調用listener.notify方法。因此將調用MainWindow中的notify方法。

0

看看番石榴的EventBus。 您可以使用它在兩個類之間進行通信,而不需要彼此之間的引用。

相關問題