我有一个计时器方法,每次用户输入内容时都会运行。基本上,用户有一分钟的时间来输入某些内容,否则计时器将打印响应,但如果用户在计时器超时之前输入某些内容,则不会打印响应。基本上,我在取消最后一个计时器并调用一个新计时器时遇到了麻烦,因为如果我不取消计时器,前一个计时器会继续运行,而新计时器会不断被调用,所以它只会造成一团糟。我的方法如下
主要:
public static void main(String[] args) {
while(true) {
runner();
}
}
运行者:
public static void runner() {
timer();
String s = input.nextLine();
System.out.println(s);
}
计时器:
public static void timer() {
TimerTask task = new TimerTask() {
public void run() {
System.out.println("Say something already!");
}
};
long delay = TimeUnit.MINUTES.toMillis(1);
Timer t = new Timer();
t.schedule(task, delay);
}
我到底要如何取消此操作。有人要求我使用 TimerTask 类中的 cancel() 方法,但我不知道在哪里调用,甚至不知道如何调用。
最佳答案
让timer()方法返回TimerTask对象,当input.nextLine()返回时,调用TimerTask.cancel()。
public static void runner() {
TimerTask t = timer();
String s = input.nextLine();
t.cancel();
System.out.println(s);
}
public static void timer() {
TimerTask task = new TimerTask() {
public void run() {
System.out.println("Say something already!");
}
};
long delay = TimeUnit.MINUTES.toMillis(1);
Timer t = new Timer();
t.schedule(task, delay);
return task;
}
也可以返回 Timer 并调用 Timer.cancel()
关于java - java中如何停止定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33745858/