我想让一个数字每 x 毫秒上升一次,但是 Thread.sleep() 一次完成
I want to make a number go up once every x milliseconds, but Thread.sleep() does it all at once
当我尝试在 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);
}
}
事件侦听器始终在同一个线程上执行,即 AWT 事件调度线程 (EDT)。 GUI 还在该线程上重绘,因此在侦听器退出之前无法更新。
您应该使用 javax.swing.Timer
代替 Thread.sleep
。 Thread.sleep
应该很少使用。 Object.wait
通常更合适,这样线程可以被唤醒用于其他目的。
(您用 Object
中的方法重载了 wait
,这充其量只是一件非常奇怪的事情。)
当我尝试在 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);
}
}
事件侦听器始终在同一个线程上执行,即 AWT 事件调度线程 (EDT)。 GUI 还在该线程上重绘,因此在侦听器退出之前无法更新。
您应该使用 javax.swing.Timer
代替 Thread.sleep
。 Thread.sleep
应该很少使用。 Object.wait
通常更合适,这样线程可以被唤醒用于其他目的。
(您用 Object
中的方法重载了 wait
,这充其量只是一件非常奇怪的事情。)