我写了一个独立的连接4游戏。
接下来我希望能够通过网络播放并具有聊天功能。
connect 4 GUI(JFrame)成立 - >连接4游戏模型
我想实现拥有Network API的connect 4网络GUI(JDialog)(这里用户可以选择充当服务器或客户端)。 (服务器仅提供单个连接)
最后是聊天GUI(JDialog)来交换消息。
我的问题是如何实现类间/ GUI通信?当收到网络消息时,它应该被传送到正确的接收者(游戏/聊天),也可以将聊天/游戏发送的消息发送到远程机器。
我已经研究了内部课程,但被告知在单课课程中实施这么多课程并不是一个坏主意,我也不喜欢这个想法。
我已经在C#中编写了另一个游戏战舰,它使用代理来完成这项任务,但遗憾的是我知道代表不能用Java。
我是初学者,目前正在探索各种选择,所以我愿意接受您的指导。
谢谢你。答案 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事件,如上所述。