可以在Swing工作线程之外更改模型吗?

Car*_*icz 6 java concurrency user-interface swing

在"严肃"的Java GUI应用程序中,您将拥有许多GUI元素背后的模型:例如,DocumentModel支持a JEditorPaneListModel后面的JList.

我们总是被告知不要从Swing工作线程外部进行GUI更改,并给出SwingUtilities.invoke...()解决方法.好吧,我可以忍受!当直接更改GUI组件的属性时,它当然是必要的(并且运行良好).

理想情况下,我的大多数GUI可见更改都是模型,而不是JComponents.但是因为它们是GUI可见的,它们是否"算作"GUI变化?即改变事件和听众提供必要的解耦,还是需要包装模型更改invoke...()

对于Swing专业人士来说可能是老帽子,但是我无法找到任何明确说明这种或那种方式的参考文献.

Lau*_*t K 5

通常,模型更改必须包装到invokeLater(...)中.在我看到的大多数挥杆类的模型代码中没有解耦.

您可以创建一个模型,该模型可以包含检查在Event Dispatcher Thread上进行GUI修改的调用.