【问题标题】:Calling repaint() from non-main thread in java applet从 java applet 中的非主线程调用 repaint()
【发布时间】:2013-05-01 00:43:56
【问题描述】:

我有一个实现可运行的 java 小程序类。在这个类的run() 方法中,我调用了repaint()。 run 方法的内容包含在一个无限循环中。在applet 类的init() 中,我使用new Thread(this).start() 来启动第二个线程。我的问题是,从 run() 方法调用 repaint() 是否会向主线程发出执行paint() 的信号,或者paint() 是否将作为第二个线程的一部分执行。如果是前者,那么第二个线程是否会继续其循环而不等待(如果可能)执行paint()?

【问题讨论】:

    标签: java multithreading repaint


    【解决方案1】:

    从技术上讲,事件调度线程是它自己的线程,与启动小程序的(主)线程分开。

    重绘过程由RepaintManager 安排。简短的回答基本上是,RepaintManager 将安排在事件调度线程上发生重绘。

    直接从单独的线程调用repaint 是否安全?它会争辩说这不是好的做法。

    出于某种原因,我倾向于谨慎行事,并简单地确保与 UI 的所有交互并无论如何都同步到 EDT。省去了很多第二次猜测,恕我直言

    我的理解是repaint 通常被认为是线程安全的。但这并不意味着它会在未来保持这种状态。

    【讨论】:

    • 感谢您的回答,但它并没有真正回答我的问题。 =/
    • 答案是 - 不要依赖它是线程安全的,如果可能的话,尽量从 EDT 中调用 repaint(使用类似 SwingUtilities.invokeLater 的东西 - 但这是我个人的对主题的感觉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多