类与JFrame JDialog之间的Java通信

类与JFrame JDialog之间的Java通信,java,communication,Java,Communication,我已经写了一个独立的连接4游戏 接下来,我想能够发挥它在网络上,也有一个聊天功能 连接4 GUI(JFrame)保持->连接4游戏模型 我想实现包含网络API的connect 4网络GUI(JDialog)(在这里,用户可以选择充当服务器或客户端)。(仅为单个连接提供服务的服务器) 最后是一个聊天GUI(JDialog)来交换消息 我的问题是如何实现类间/GUI通信?当收到网络消息时,应将其发送至正确的接收器(游戏/聊天),并将聊天/游戏发送的消息传输至远程机器 我已经研究了内部类,但有人告诉我

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

接下来,我想能够发挥它在网络上,也有一个聊天功能

连接4 GUI(JFrame)保持->连接4游戏模型

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

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

我的问题是如何实现类间/GUI通信?当收到网络消息时,应将其发送至正确的接收器(游戏/聊天),并将聊天/游戏发送的消息传输至远程机器

我已经研究了内部类,但有人告诉我,在单个类中实现这么多是个坏主意,我也不太喜欢这个想法

我用C#编写了另一个游戏《战舰》,它使用代理来完成这项任务,但遗憾的是,我被告知Java中没有代理

我是一个初学者,目前正在探索各种选择,因此我愿意接受您的指导


多谢各位

这里有两个问题

首先,您必须记住,所有GUI操作都必须从Swing的事件调度线程(EDT)发出。因此,如果另一个线程(例如侦听网络消息的线程)想要更新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事件。

我可能在这里不太明白:您知道如何通过给您的聊天对话框一个引用来直接调用主框架的方法吗?是的,我知道这一点。我在寻找更多的选择。这是一个超级巧妙的方式来实现我想要的!它在代码中显示完整性,而不传递整个对象。非常整洁!非常感谢您提出这个想法。