【问题标题】:I want to make a number go up once every x milliseconds, but Thread.sleep() does it all at once我想让一个数字每 x 毫秒增加一次,但是 Thread.sleep() 一次完成
【发布时间】:2021-01-20 10:19:32
【问题描述】:

当我尝试在 jFrame 中执行此代码时:它不是每 100 毫秒添加一个从 0 到 10 的数字,而是等待 1 秒并一次添加所有数字?

任何帮助将不胜感激。

public static void wait(int milliseconds) {
    try {
        Thread.sleep(milliseconds);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    for (int i = 0; i <= 10; i++) {
        wait(100);
        jTAOut.append("" + i);
    }
}

【问题讨论】:

  • 您在线程中休眠,您的 GUI 正在运行(事件调度线程)。你不应该这样做,因为它会冻结 GUI,就像你描述的那样。看看this answer,它更详细地介绍了如何避免这种情况。

标签: java swing jframe wait


【解决方案1】:

事件侦听器始终在同一个线程上执行,即 AWT 事件调度线程 (EDT)。 GUI 还会在该线程上重绘,因此在侦听器退出之前无法更新。

您应该使用javax.swing.Timer 代替Thread.sleepThread.sleep 应该很少使用。 Object.wait 通常更合适,以便线程可以被唤醒用于其他目的。

(你用Object 中的方法重载了wait,这充其量是一件很奇怪的事情。)

【讨论】:

  • 感谢您的回答,但即使在对您提到的事情进行了大约一个小时的研究之后;我还是不明白。您能否举例说明您的意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多