如何知道组件(弹簧/码头)是否完全初始化的方法

时间:2011-10-14 05:42:09

标签: java spring swing design-patterns jetty

我有一个后端服务器(Jetty),它处理HTTP请求并与MySQL数据库交互。

这一切都与Spring有关。

我在Swing中还有一个UI前端,用作管理员的工具(用户可以与DB交互等)。

现在服务器和UI有点捆绑,这意味着当主类开始加载时,它首先启动Spring上下文,然后启动UI(在EDT线程中)。
所以基本上只要UI运行,服务器就会监听请求。

我遇到的问题如下:

我想在服务器完全初始化之后显示GUI,实际上我更喜欢在GUI启动期间实际连接到服务器并获取一些数据,以便在GUI出现在屏幕上时显示它们。

现在我通过在开始在EDT线程中创建GUI之前添加几秒钟的睡眠来实现这一点。
这解决了它,但延迟是任意的,我想这取决于目标机器 此外,它使GUI需要很长时间才能显示(现在延迟为10秒)。

我试图弄清楚在显示GUI之前知道Spring上下文和后端Jetty已经完全初始化的最佳方法。

我想一种方法是尝试向服务器发送请求,如果失败,请继续尝试多次,直到成功,然后显示GUI。

但我想知道是否有更标准的方法。

非常欢迎任何意见。

2 个答案:

答案 0 :(得分:1)

要检查您的Spring应用程序是否已加载,您可以实现Spring的ApplicationListener界面并监听ContextRefreshedEvent

如果从Spring上下文启动Jetty(如在this example中),一旦收到ContextRefreshedEvent,它将完全初始化。 如果您使用其他机制启动Jetty,您可以向它发出http请求,因为在Jettys启动序列结束时设置了http连接器。

答案 1 :(得分:1)

1)创建空GUI,其中一个JButton用于开始,第二个用于中断...

2)Splash Screen或者我看到一些实现使用JWindow / JDialog

然后将一个或多个JProgressBar放在此处,显示来自...的步骤结果

3)创建SystemTry并在trayIcon.displayMessage()显示进度,最后显示GUI或放在这里JPopupMenu ......

4)你可以在a_la StatusBar中的一个水平JPanel(行)中创建大量的JProgressBars(我用ToolTip创建了9个JProgressBars作为监听进程)