我有一个在多个线程上运行的Swing应用程序,我在EDT上创建了Swing组件。执行程序将启动在某些时候将文本插入JTextArea的线程。但是,与InvokeAndWait不同,InvokeLater并不总是进行附加。当我收集它时,它是异步的,非阻塞的,但仍应执行附加操作。怎么会这样?
谢谢
最佳答案
使用EventQueue.invokeLater()
从另一个线程更新组件的模型是正确同步的必要(但不充分)条件。您仍然需要同步对任何共享数据的访问。在此example中,display()
参数s
是对不可变final
的String
引用;可以在display()
中安全地访问它,而无需进一步同步。如果您有对可变对象的final
引用,请考虑thread-safe collection。您可以使用here引用的方法之一查找违规情况。或者,考虑使用SwingWorker
来托管example的后台任务。
关于java - 带JTextArea的invokeLater与invokeAndWait,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33708881/