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

2022-09-01 18:56:18

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

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


答案 1

以下是官方页面的引用,指出:

以下 JComponent 方法可以从任何线程安全调用:、 和 。和 方法将事件调度线程的请求分别排队以调用 和 。repaint()revalidate()invalidate()repaint()revalidate()paint()validate()

编辑 1 :


由于上一个提到的链接已被转移。我正在发布一个新链接,尽管可能需要更多时间才能真正知道此页面的真实性,因为它似乎来自某些的服务器,从地址栏中可以看出。JavaUniversity


答案 2

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

在AWT和秋千上绘画(“官方”文档)

Swing 类的目的是最大限度地提高在 Swing 包含层次结构上重绘处理的效率,并实现 Swing 的“重新验证”机制(后者将成为单独文章的主题)。它通过拦截 Swing 组件上的所有重绘请求(因此 AWT 不再处理它们)并保持其自身对需要更新的内容的状态(称为“脏区域”)来实现重绘机制。最后,它用于处理事件调度线程上的挂起请求,如“重绘处理”(选项 B)一节中所述。RepaintManagerinvokeLater()

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


推荐