我有一个后端服务器(Jetty),它处理HTTP请求并与MySQL数据库交互。
这一切都与Spring有关。
我在Swing中还有一个UI前端,用作管理员的工具(用户可以与DB交互等)。
现在服务器和UI有点捆绑,这意味着当主类开始加载时,它首先启动Spring上下文,然后启动UI(在EDT线程中)。
所以基本上只要UI运行,服务器就会监听请求。
我遇到的问题如下:
我想在服务器完全初始化之后显示GUI,实际上我更喜欢在GUI启动期间实际连接到服务器并获取一些数据,以便在GUI出现在屏幕上时显示它们。
现在我通过在开始在EDT线程中创建GUI之前添加几秒钟的睡眠来实现这一点。
这解决了它,但延迟是任意的,我想这取决于目标机器
此外,它使GUI需要很长时间才能显示(现在延迟为10秒)。
我试图弄清楚在显示GUI之前知道Spring上下文和后端Jetty已经完全初始化的最佳方法。
我想一种方法是尝试向服务器发送请求,如果失败,请继续尝试多次,直到成功,然后显示GUI。
但我想知道是否有更标准的方法。
非常欢迎任何意见。
答案 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作为监听进程)