invokeLater vs invokeAndWait with JTextArea
我有一个在多个线程上运行的Swing应用程序,我在EDT上创建了Swing组件。 Executor启动线程,在某些时候将文本插入JTextArea。 但是,与InvokeAndWait不同,InvokeLater并不总是执行追加。 当我收集它时,它是异步的,非阻塞的,但仍然应该进行追加。 怎么会这样?
谢谢
使用EventQueue.invokeLater()
从另一个线程更新组件的模型是正确同步的必要但不充分的条件。 您仍然需要同步对任何共享数据的访问。 在此示例中 , display()
参数s
是对不可变 String
的final
引用; 它可以在display()
安全访问,无需进一步同步。 如果您对可变对象有final
引用,请考虑一个线程安全的集合 。 您可以使用此处引用的方法之一查找违规行为。 或者,例如,考虑使用SwingWorker
来承载后台任务。