【发布时间】:2010-08-19 20:11:33
【问题描述】:
我有一个客户端/服务器问题,我正在尝试找出最佳解决方案。
如果客户端因任何原因与服务器断开连接,我希望输入输出线程有一种方法可以提醒 gui 线程出现问题,从而让 gui 线程打印错误并优雅地处理它(可能会退出登录 gui)。创建初始 gui 线程后,客户端可以更改为任意数量的 gui,这取决于他在做什么,所以我想我需要一种方法来动态查看当前正在运行的 gui。
到目前为止,我正在考虑这样做的方式:
1) 创建一个创建并显示每个 gui 的对象。因此,与其调用 invokeLater...SomeGui.CreateAndShoGui()...,不如让这个对象负责执行此操作,即 GuiObject.showSomeGui();
2) 让每个 gui 实现一个接口,这将确保有一个方法,当我们失去与服务器的连接时,该方法会在调用时正常关闭此 gui。
3) 有一个线程来监控 IO 线程和 gui 对象。如果 IO 线程出现问题,IO 线程将关闭并通知监控线程我们与服务器断开连接。然后,监控线程可以提醒任何打开的 gui(来自 gui 对象)我们已失去连接并且需要关闭。
我刚刚开始考虑这个问题,到目前为止,这是我想出的最佳解决方案。这似乎是一个不会给代码增加太多复杂性的合理解决方案吗?或者任何人都可以推荐一个更容易让人们阅读代码理解的解决方案?
谢谢
编辑: 我正在玩弄的另一个选项是在 IO 线程上有一个对象,该对象在打开时也会传递给每个新的 gui。该对象会将当前打开的 gui 引用返回给 io 线程,以便 io 线程可以在出现问题时提醒它。不过我反对这个解决方案,因为如果你有一个专门用于让它工作的对象(如上面的解决方案),而不是将一些晦涩的对象传递给每个 gui,它似乎会更容易阅读。
【问题讨论】:
标签: java multithreading user-interface client-server notifications