我有一个相当复杂的程序,我已经设置。在该程序中有一个首选项窗口。其中一个首选项是程序连接到的服务器。当用户更改该服务器或添加另一个服务器时,程序需要“重新启动”(处置并重新创建main_window类)。
然而,我对如何做到这一点的最佳实践一无所知。以下是堆叠方法中的基本场景:
main全局类,用于启动。创建主窗口类。
向用户显示数据的main_window JFrame
具有许多用户可设置选项的prefs JFrame
Server_Editor_Dialog_Box JFrame,当用户点击OK时,必须重新启动程序
无论如何,我的问题是如何通知main在ServerEditorDialogBox中发生了一些事情,并且程序需要重新启动。我应该抛出一个异常吗?我应该有一个监听器链SEDB->prefs->main_window->main?或者我应该做一些完全不同的事情?
发布于 2014-12-19 05:35:05
您可能不应该使用总是以这种方式处理的异常,但这似乎是最简单的解决方案。
编程实践的最佳解决方案是使用事件侦听器,并让侦听器/处理程序调用一个方法来释放和重新创建对话框。
发布于 2014-12-19 05:47:35
问题是我如何通知"main“在"ServerEditorDialogBox”中发生了一些事情,程序需要重新启动“
==>由于"Server_Editor_Dialog_Box“和"main”将在单独的线程中执行,因此您需要某种全局消息传递服务,因为这两个线程都有单独的堆栈用于执行。您可以使用一个队列(集合)并将其声明为静态java。ServerEditorDialogBox可以将事件发送到队列,"main“可以轮询队列,并对其信任的事件采取相应的操作。
希望这能有所帮助
发布于 2014-12-20 00:43:57
我个人倾向于使用事件总线,它允许我以一种透明的方式将事件传播到各种控制器。我已经使用过,并且我可以推荐Guava's EventBus。这使您可以更好地组织代码,并与传统Java侦听器所具有的UI语义解耦。
其思想是在主类中为给定事件订阅一个方法,然后在UI代码(Server_Editor_Dialog_Box)中将其发布到总线上。
https://stackoverflow.com/questions/27556027
复制相似问题