invokeLater vs invokeAndWait with JTextArea

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

谢谢

使用EventQueue.invokeLater()从另一个线程更新组件的模型是正确同步的必要但不充分的条件。 您仍然需要同步对任何共享数据的访问。 在此示例中 , display()参数s是对不可变 Stringfinal引用; 它可以在display()安全访问,无需进一步同步。 如果您对可变对象有final引用,请考虑一个线程安全的集合 。 您可以使用此处引用的方法之一查找违规行为。 或者,例如,考虑使用SwingWorker来承载后台任务。