我一直在将Substance外观整合到我的应用程序中,并遇到有关内部EDT(事件调度线程)检查例程的一些问题。物质绝对拒绝在EDT之外构造UI类。我已经做了很多Swing / AWT,并且我了解有关EDT的大多数规则。我使用SwingWorker,SwingUtilties.invokeLater修改组件。我总是尽管可以在EDT之外构造这些组件,但是必须在EDT上实现和操纵这些组件。换句话说,您可以在后台构造和设置默认值,但是对pack / setVisible的调用必须是EDT,以及随后的任何操作该组件的调用。
我问的原因是,我要构建一个特别“漂亮”的窗口,其中涉及许多小部件,状态和资源(很多图标)。以前,我是在SwingWorker的背景方法上构建窗口的,并在done方法中使该窗口可见。从来没有一个问题。切换到Substance后,内部EDT检查就使我难过。
我已经能够重构代码来解决这个问题。我可以在EDT上构建一个不好的解决方案,因为整个应用程序都会阻塞。我还可以进行更多重构,并尽力将所有额外的资源加载到EDT之外。
包装起来... 在事件调度线程上构造 Swing / AWT小部件是否安全?
哔哔one
慕标琳琳
相关分类