【发布时间】:2018-12-06 00:50:39
【问题描述】:
我绝望了,我基于客户端-服务器原理用 Java 开发了一个简单的多用户聊天。我已经编写了一个基本的多线程服务器应用程序,它运行良好。我的问题是基于 Swing GUI Toolkit 的客户端。带有运行时循环的基本 UI,用于在后台接收消息。我的问题是我想将套接字逻辑与 UI 分开,这意味着在最好的情况下,我有两个不同的类,一个用于套接字运行时循环,另一个用于管理 UI。由于问题,运行时循环必须向 UI 通知/添加消息,它们相互依赖。
-
MessengerView是我的主类,它包含了 swing ui 和所有依赖的组件。目前该类还包含套接字逻辑,但我想将它们提取到外部类中。 -
ClientRuntime应该持有套接字逻辑的类...
我的问题是,我如何将它们分开以及如何连接它们?例如,我尝试了类似摇摆的事件,并注册了这样的方法:
addListener(MessageArrivedListener listener);
emitMessageArrivedEvent(String message);
问题是,如果事件计数增加,就会非常混乱!如前所述,我的第二个选择是将套接字逻辑和 ui 设计放在一个类中,但我认为这是一个坏主意,因为它很难为其编写单元测试或查找错误......
在我使用 C++ 的时候,我有时会使用友元类来解决这个问题,因为这样可以访问其他类的类成员!但是这个解决方案通常也很令人困惑,我发现 Java 没有这样的选择。
那么是否有任何其他可能性来保持摆动小部件和套接字逻辑之间的连接,而不将它们存储在同一个类(文件)中?
【问题讨论】:
-
The problem is, that it is very confusing if the count of events raises!是什么意思。您是否也考虑过实现自己的侦听器?这样一来,您就可以让您的套接字逻辑在其他地方的单独线程中运行,并且只要您想通知您的 UI 发生更改,就可以提供很好的事件。 -
@Aris Yea of coursd 我写了自己的听众,但正如我已经说过的,我必须写很多……对我来说,这似乎很令人困惑,因为我没有概述谁来做什么,因为我不只有一个摆动视图,例如还有一个用于登录的 ui 表单,它还通过事件连接到套接字持有类...
标签: java multithreading swing sockets user-interface