在 Java 7+ 中的 EDT 之外使用 Swing repaint() 方法是否仍然安全?
我知道,即使使用Swing的线程模型,调用和从任何线程中选择的其他一些方法也被认为是安全的,但是我最近在评论中被告知事实并非如此。repaint()
谷歌发现了很多较旧的讨论,说它是安全的,但最近什么都没有。所有曾经说它是安全的官方参考资料似乎已经消失了,我在各种论坛上发现一些人在讨论它如何不再安全。
我找不到任何官方的东西来确认它是否是 - 如果它已经被更改,我真的希望看到一些东西来解释更改的逻辑。考虑到破坏现有应用程序的风险有多大,删除它似乎是一个非常奇怪的功能。
实际上,我正在寻找一个指向官方参考(即Javadoc,oracle教程或源代码链接)的链接,说明这些方法是否仍然可以从任何线程调用。
有关参考,请点击此处查看以下问题:
在EDT之外使用Computicter.repaint()安全吗?
引用现已消失的太阳页面的一句话说:
以下 JComponent 方法可以从任何线程中安全调用:repaint()、revalidate() 和 invalidate()。repaint() 和 realidate() 方法将事件调度线程的请求排队,分别调用 paint() 和 validate()。
这与我的理解相符,但我现在找不到该页面或任何类似页面,并且我看到了几个人未经证实的谣言,说它不再安全。但另一方面,我找不到任何明确的说法,即此功能已更改。
更改说明
可能有助于解决这个问题的是Oracle关于Swing线程处理变化的官方声明。我找到了“Java 7中的更改”页面,但根本没有提到它,这些页面都没有提到线程或EDT:
http://docs.oracle.com/javase/7/docs/technotes/guides/swing/enhancements-7.html
http://docs.oracle.com/javase/7/docs/technotes/guides/awt/enhancements-7.html