类和JFrame之间的Java通信JDialog

时间:2010-04-23 15:29:16

标签: java communication

我写了一个独立的连接4游戏。

接下来我希望能够通过网络播放并具有聊天功能。

connect 4 GUI(JFrame)成立 - >连接4游戏模型

我想实现拥有Network API的connect 4网络GUI(JDialog)(这里用户可以选择充当服务器或客户端)。 (服务器仅提供单个连接)

最后是聊天GUI(JDialog)来交换消息。

我的问题是如何实现类间/ GUI通信?当收到网络消息时,它应该被传送到正确的接收者(游戏/聊天),也可以将聊天/游戏发送的消息发送到远程机器。

我已经研究了内部课程,但被告知在单课课程中实施这么多课程并不是一个坏主意,我也不喜欢这个想法。

我已经在C#中编写了另一个游戏战舰,它使用代理来完成这项任务,但遗憾的是我知道代表不能用Java。

我是初学者,目前正在探索各种选择,所以我愿意接受您的指导。

谢谢你。

1 个答案:

答案 0 :(得分:1)

这里有两个问题。

首先,您必须记住必须从Swing的事件调度线程(EDT)发出所有GUI操作。因此,如果另一个线程(例如侦听网络消息的线程)想要更新GUI,则必须使用SwingUtilities.invokeLater,如下所示:

 // Network thread
 final Message msg = getMessage();
 SwingUtilities.invokeLater(new Runnable() {
   public void run() {
      // This code will be executed on the EDT
      // it can access the msg variable because it is final
   }
 });

第二点是协调GUI对象和网络对象。我认为最好的方法是创建两个Mediator类,它们将从网络对象接收通知,并将它们“转换”为GUI对象上的相应操作(反之亦然)。这些调解器还将确保在EDT上发送GUI事件,如上所述。