2013-05-30 88 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。 您可以使用它在两个类之间进行通信,而不需要彼此之间的引用。

相关问题