在EDT之外安全使用Component.repaint()?

我找不到任何官方文档说从除了事件调度线程(EDT)之外的另一个线程调用Component.repaint是安全的。

这样吗? 我在哪里可以找到一些文档/代码?

以下是官方页面的引用 :

从任何线程调用以下JComponent方法都是安全的: repaint()revalidate()invalidate()repaint()revalidate()方法将事件派发线程的请求分别调用paint()validate()

编辑1:


由于前面提到的链接已经转移。 我发布了一个新的链接 ,虽然可能需要更多的时间来真正了解这个页面的真实性,因为它似乎来自Java虽然它来自一些University的服务器,从地址栏可以看出。

它是线程安全的。 RepaintManager确保将此类调用放在事件调度线程中。

在AWT和Swing中绘画(“官方”文档)

Swing的RepaintManager类的目的是最大化Swing包含层次结构上重绘处理的效率,并实现Swing的“重新validation”机制(后者将成为单独文章的主题)。 它通过拦截Swing组件上的所有重绘请求(因此它们不再由AWT处理)并在需要更新的内容上维护自己的状态(称为“脏区”)来实现重绘机制。 最后,它使用invokeLater()来处理事件调度线程上的挂起请求,如“重新绘制处理”一节(选项B)中所述。

对于大多数程序,RepaintManager可以被视为Swing内部系统的一部分,几乎可以忽略。 但是,它的API为程序提供了更好地控制绘画某些方面的选项。

关于这个论坛的经验

(对于两个回答者来说都是+1)但是,我认为不可能正确回答你的问题,方法的一部分Graphics(2D)需要以编程方式调用repaint() ,其余的直接实现此方法(在API )(确保一些他们在API中遗漏了这个方法)

对于Swing JComponents一部分可能更好的不同意,这个论坛充满了关于Concurency in Swing的问题,从Graphics(2D)思考JTextComponentsJTree ,并以setText()结束(同样的方式声明为线程安全setText()

关于Concurency in Swing有很多问题