我们为应用程序建立了一个启动屏幕。当应用程序的初始化在主线程中时,它可以正常工作,但是当我将初始化移动到EDT(在主方法中使用SwingUtilities.invokeLater)时,进度条和信息标签由于EDT的阻塞而无法重绘。我知道使用invokeLater可以帮助我重新绘制GUI。但我的问题是:将应用程序初始化分成单独的片段非常困难(遗留代码)。即使我这样做了,我也会得到一个丑陋的matroshka-code(六次invokeLater在invokeLater中)。
我应该选择哪种解决方案:
1. 将初始化保留在主线程中(我的当前决定) 2. 尝试将其移动到EDT(如果可能),并获得matroshka代码 3. 使用Foxtrot库在每次更新启动屏幕时提供EDT中的非阻塞休眠(它可以正常工作-启动屏幕可以重绘自己,但对我来说这是一种hack)
可能有人有更好的解决方案?
P.S. 我已经阅读了一些类似的问题,但没有找到对我有用的内容。
我应该选择哪种解决方案:
1. 将初始化保留在主线程中(我的当前决定) 2. 尝试将其移动到EDT(如果可能),并获得matroshka代码 3. 使用Foxtrot库在每次更新启动屏幕时提供EDT中的非阻塞休眠(它可以正常工作-启动屏幕可以重绘自己,但对我来说这是一种hack)
可能有人有更好的解决方案?
P.S. 我已经阅读了一些类似的问题,但没有找到对我有用的内容。
EDT
上进行初始化。只需确保涉及GUI
的所有内容都在EDT
上完成,而其余部分如果需要可以在另一个线程中完成。 - Jonathan Drapeau