invokeLater vs invokeAndWait with JTextArea

时间:2015-11-14 13:26:00

标签: java swing invokelater

我有一个在多个线程上运行的Swing应用程序,我在EDT上创建了Swing组件。 Executor启动线程,在某些时候将文本插入JTextArea。但是,与InvokeAndWait不同,InvokeLater并不总是执行追加。当我收集它的同步,非阻塞,但仍然应该做追加。怎么会这样?

由于

1 个答案:

答案 0 :(得分:4)

使用EventQueue.invokeLater()从另一个线程更新组件的模型是必要的 - 但不是足够的条件,以实现正确的同步。您仍然需要同步对任何共享数据的访问。在此example中,display()参数s是对{em>不可变 final的{​​{1}}引用;它可以在String中安全访问,无需进一步同步。如果您对可变对象有display()引用,请考虑thread-safe collection。您可以使用引用的here方法之一查找违规行为。或者,考虑SwingWorker来托管example的后台任务。