我有一个计时器方法,每次用户输入时都会运行。基本上用户有一分钟输入内容或计时器将打印响应,但如果用户在计时器用完之前输入了某些内容,则不会打印响应。基本上,我在取消最后一个计时器并调用一个新计时器时遇到了麻烦,因为如果我不取消计时器,前一个计时器会继续运行,而新计时器会继续被调用,所以它只会造成巨大的混乱。我的方法如下
主:
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()方法,但我不知道在哪里打电话,甚至不知道如何。
答案 0 :(得分:1)
让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()
答案 1 :(得分:-1)
我想这可行:
Main:
TimerTask task;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
runner();
while(true) {
timer(); //run timer
String line = scan.nextLine(); //read line (happens after hit Enter)
System.out.println(line);
//if line is read, then rerun timer which has on next iteration
}
}
Timer:
public static void timer() {
if(null != task) {
task.cancel();
}
task = new TimerTask() {
public void run() {
System.out.println("Say something already!");
//timer(); reinit maybe after 1 min again?
}
};
long delay = TimeUnit.MINUTES.toMillis(1);
Timer t = new Timer();
t.schedule(task, delay);
}