我想创建一个简单的程序,使用Java.Util.Timer将秒数计算到100 下面的代码是我正在使用的代码,但是它只是一次打印所有数字,而不是在每一个之间等待一秒。我该如何解决这个问题? (通常我会使用thread.sleep,但这只是概念证明。)
import java.util.Timer;
import java.util.TimerTask;
public class Main {
static Timer timer = new Timer();
static int seconds = 0;
public static void main(String[] agrs) {
MyTimer();
}
public static void MyTimer() {
TimerTask task;
task = new TimerTask() {
@Override
public void run() {
while (seconds < 100) {
System.out.println("Seconds = " + seconds);
seconds++;
}
}
};
timer.schedule(task, 0, 1000);
}
}}
答案 0 :(得分:4)
不要在while循环中使用它:
task = new TimerTask() {
@Override
public void run() {
while (seconds < 100) {
System.out.println("Seconds = " + seconds);
seconds++;
}
}
};
while循环将立即运行,因为它内部没有延迟。相反,你想让Timer本身成为你的循环,这意味着不需要这个循环。
而是使用if块来检查计数是否为&lt;一些最大数量,如果是这样,打印出来并递增计数。
task = new TimerTask() {
private final int MAX_SECONDS = 100;
@Override
public void run() {
if (seconds < MAX_SECONDS) {
System.out.println("Seconds = " + seconds);
seconds++;
} else {
// stop the timer
cancel();
}
}
};
答案 1 :(得分:0)
为了停止计时器,应该调用 timer.cancel()(不仅是TimerTask之一),因此计时器将停止并串联其他相关线程。
@Override
public void run() {
if (seconds < Orologio.MAX_SECONDS) {
System.out.println("Seconds = " + seconds);
seconds++;
} else {
timer.cancel();
System.out.println("Timer canceled");
}
}
};