Java 如何停止运行计时器任务
我正在尝试制作一个简单的计时器,在指定的秒数后播放嘟嘟声。我设法让它工作,但定时器任务在哔的一声后继续运行。现在我要停止执行吗? 这是我的密码:Java 如何停止运行计时器任务,java,timer,Java,Timer,我正在尝试制作一个简单的计时器,在指定的秒数后播放嘟嘟声。我设法让它工作,但定时器任务在哔的一声后继续运行。现在我要停止执行吗? 这是我的密码: import java.util.Scanner; import java.util.Timer; import java.util.TimerTask; import java.awt.Toolkit; class Alarm { public static void main(String[] args) { long
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
import java.awt.Toolkit;
class Alarm {
public static void main(String[] args) {
long delay;
Scanner scan = new Scanner(System.in);
System.out.print("Enter a delay in seconds: ");
delay = scan.nextInt()*1000;
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
Toolkit.getDefaultToolkit().beep();
}
};
timer.schedule(task, delay);
}
}
cancel()
应执行此操作-cancel
停止取消给定的TimerTask
/计时器
您需要通过调用以下方法取消计时器
timer.cancel(); // Terminates this timer, discarding any currently scheduled tasks.
timer.purge(); // Removes all cancelled tasks from this timer's task queue.
这将取消任务,因此类似的操作将起作用:
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
import java.awt.Toolkit;
class Alarm {
private static boolean run = true;
public static void main(String[] args) {
long delay;
Scanner scan = new Scanner(System.in);
System.out.print("Enter a delay in seconds: ");
delay = scan.nextInt()*1000;
final Timer timer = new Timer();
final TimerTask task = new TimerTask() {
@Override
public void run() {
if(run) {
Toolkit.getDefaultToolkit().beep();
} else {
timer.cancel();
timer.purge();
}
}
};
timer.schedule(task, delay);
// set run to false here to stop the timer.
run = false;
}
}
以下是对我有效的建议(也使用了purge()建议):
isStart=true;//如果调用了true timmer函数countiue,则时间被取消
定时器=新定时器(); timer.schedule(新TimerClass(),0,5000)
从这里抄来的我试过了,没用。在您的示例中,run将如何更改为false?我刚在哔的一声后直接调用了timer.cancel(),它就工作了。当然,这取决于你。你可以保持定时,比如在Baadshah的链接中,或者使用其他条件。你想什么时候停止哔哔声?那你为什么要使用TimerTask?为什么不直接使用:'Toolkit.getDefaultToolkit().beep()?请注意,调用.cancel()会杀死计时器(因此是“调度”部分),而不会杀死任何正在运行的计时器任务。它会终止未来的任务,但不会终止当前正在运行的任务(“终止此计时器,丢弃任何当前计划的任务。不会干扰当前正在执行的任务(如果存在)。”)在当前示例中,没有人关心,因为这只是概念证明,但仍然需要提及。对不起。发帖后我很快就明白了这一点。我必须将timer声明为final,并在run()方法中发出嘟嘟声后调用timer.cancel()。不确定从内部类中调用局部变量方法是否是一个很好的解决方案,但是…会取消计划任务,但不会取消活动任务。好吧,我想在这个例子中这并不重要。那么purge()呢?
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
import java.awt.Toolkit;
class Alarm {
public static void main(String[] args) {
long delay;
Scanner scan = new Scanner(System.in);
System.out.print("Enter a delay in seconds: ");
delay = scan.nextInt()*1000;
final Timer timer = new Timer();
final TimerTask task = new TimerTask() {
@Override
public void run() {
Toolkit.getDefaultToolkit().beep();
timer.cancel();
timer.purge();
}
};
timer.schedule(task, delay);
}
}
class TimerClass extends TimerTask {
public void run() {
if (isStart) {
yourFunction();
}else {
cancel();
}
}
}