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

dac*_*cwe 24 java swing awt

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

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

nIc*_*cOw 27

以下是官方页面引用:

下面的JComponent方法是安全的,从任何线程调用: repaint(),revalidate(),和invalidate().在repaint()revalidate()该事件派发线程队列的方法请求调用paint()validate()分别.

编辑1:


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


mre*_*mre 7

它是线程安全的.在RepaintManager确保此类电话被放置在事件指派线程.

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

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

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

  • @GagandeepBali:我也依赖它.找到它的一种方便方法是通过[`Component`](http://docs.oracle.com/javase/7/docs/api/java/awt/Component.html)API. (2认同)