<分区>
SwingWorker javadoc 中提到了上述语句。
在一个应用程序中,我看到一个冗长的后台任务在一个不同的线程中运行并且更新 UI 也没有问题(对 Swing 组件的引用是可访问的)。
莫非是有什么不好的事情要发生了?
<分区>
SwingWorker javadoc 中提到了上述语句。
在一个应用程序中,我看到一个冗长的后台任务在一个不同的线程中运行并且更新 UI 也没有问题(对 Swing 组件的引用是可访问的)。
莫非是有什么不好的事情要发生了?
最佳答案
这是因为 Java memory model不保证一个线程的内存写入对其他线程可见,除非您使用某种形式的同步。为了性能和简单性,Swing 不是同步的。因此,EDT 可能永远看不到来自其他线程的写入。
您看到的应用程序可能大部分时间都可以工作,甚至可能在某些环境中一直工作。但是当它不起作用时,它会以难以重现的非常奇怪的方式失败。
关于java - 为什么 Swing 组件应该只在事件调度线程上访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28736854/