【问题标题】:JFrame Update fails because of sleeping ThreadJFrame 更新因线程休眠而失败
【发布时间】:2020-04-01 23:15:17
【问题描述】:

我刚刚发现,当面板的线程在调用 repaint 后立即休眠时,不会调用面板的绘制函数。

这只调用paint(Graphics g)函数最多10%:

    super.repaint();
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

1:为什么会这样?我想我已经读过 swing 只使用组件的线程(主线程)。

2:如何在不从绘制函数调用线程睡眠的情况下解决此问题?

【问题讨论】:

  • 不要阻塞 UI 线程

标签: java thread-safety frame


【解决方案1】:

大部分 Swing 只能从 AWT 事件调度线程 (EDT) 中使用。 AWT 事件(包括绘画)在此线程上调度。

代码似乎正在 EDT 上执行。使用javax.swing.Timer(不是您可能看到的任何其他Timer - 尽管repaint 实际上在不同的线程上应该是安全的)为自己设置回调。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2013-09-17
    • 2016-01-11
    • 2013-02-19
    相关资源
    最近更新 更多