如何处理多层事件,Java

如何处理多层事件,Java,java,exception,listener,Java,Exception,Listener,我有一个相当复杂的程序,我已经设置。该程序中有一个首选项窗口。首选项之一是程序所连接的服务器。当用户更改该服务器或添加另一个服务器时,程序需要“重新启动”(处理并重新创建主窗口类) 然而,我对如何做到这一点的最佳实践一无所知。以下是堆叠方法中的基本场景: main整个类,用于启动。创建主窗口类 main_窗口JFrame,向用户显示数据 prefsJFrame,具有许多用户可设置的选项 Server\u Editor\u对话框JFrame,当用户点击OK时,必须重新启动程序 无论如何,我的问题是

我有一个相当复杂的程序,我已经设置。该程序中有一个首选项窗口。首选项之一是程序所连接的服务器。当用户更改该服务器或添加另一个服务器时,程序需要“重新启动”(处理并重新创建
主窗口
类)

然而,我对如何做到这一点的最佳实践一无所知。以下是堆叠方法中的基本场景:

main
整个类,用于启动。创建主窗口类

main_窗口
JFrame,向用户显示数据

prefs
JFrame,具有许多用户可设置的选项

Server\u Editor\u对话框
JFrame,当用户点击OK时,必须重新启动程序


无论如何,我的问题是如何通知main ServerEditorDialogBox中发生了一些事情,并且程序需要重新启动。我应该抛出一个异常吗?我应该有一个侦听器链SEDB->prefs->main\u window->main吗?或者我应该做一些完全不同的事情吗?

您可能不应该使用总是以这种方式处理的异常,但它似乎是最简单的解决方案

编程实践的最佳解决方案是使用事件监听器,并让监听器/处理程序调用一个方法来处理和重新创建对话框。

问题是如何通知“main”在“ServerEditorDialogBox”中发生了什么,并且程序需要重新启动“
==>由于“服务器编辑器对话框”和“主”将在单独的线程中执行,您需要某种全局消息服务,因为这两个线程都有单独的执行堆栈。您可以使用队列(java集合)并将其声明为静态。ServerEditorDialogBox可以将事件发布到队列和“主”“可以轮询队列,并对其所信任的事件采取相应的操作。

希望这有帮助

我个人会使用一个事件总线,它允许我以透明的方式将事件传播到各个控制器。我用过,我可以推荐。这允许您更好地构造代码,并与传统Java侦听器所具有的UI语义分离


其思想是,将主类中的一个方法订阅给给定的事件,并将其发布在UI代码的总线上(服务器编辑器对话框)

首先想到的是模型-视图-控制器(MVC)体系结构。您应该有一个控制器类,它充当程序中需要立即执行操作的关键部分的actionlistener