[英]Timer Task Only Runs Once
如何使我的计时器任务多次运行? 这真的让我很困扰。
timer = new Timer();
timer.schedule(new Client(), 1000);
public void run() {
try {
System.out.println("sent data");
socketOut.write(0);
} catch (Exception e) {
// disconnect client on their side
Game.destroyGame();
timer.cancel();
timer.purge();
}
}
我希望此计时器运行无限长的时间,直到发生异常。
当Javadoc说它以特定的延迟重复时,该延迟是TimerTask
启动之前的初始延迟,而不是TimerTask
将运行多长时间。 您可以重复任务的每一个period
毫秒。 查看schedule
方法。 以下是一个简单示例,该示例每2秒无限期地重复一次。 在示例中,调用:
timer.schedule(new RemindTask(seconds), 0, seconds * 1000);
告诉timer
运行RemindTask
每seconds
秒(* 1000,因为这里的时间真的以毫秒为单位),为0的初始延迟-即启动RemindTask 马上 ,然后保持定期重复。
import java.util.Timer;
import java.util.TimerTask;
public class Main {
static Timer timer;
static int i = 0;
class RemindTask extends TimerTask {
private int seconds;
public RemindTask(int seconds) {
this.seconds = seconds;
}
public void run() {
i+= seconds ;
System.out.println(i + " seconds!");
}
}
public Main(int seconds) {
timer = new Timer();
timer.schedule(new RemindTask(seconds), 0, seconds * 1000);
}
public static void main(String args[]) {
new Main(2);
System.out.format("Task scheduled.%n");
}
}
在我看来,您正在运行一个GUI程序(我使用的是SWING,因为您的另一个问题是您正在使用SWING)。 因此,这里有一些建议。 将javax.swing.Timer
用于Swing程序。
“如何使我的计时器任务运行不止一次?”
javax.swing.Timer
具有.stop()
.start()
和.restart()
以及.restart()
。 Timer
对象的基本实现是这样的
Timer timer = new Timer(delay, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// do something
}
});
timer.start();
您可以在actionPerformed
做任何您想做的事情,它将为您提供的每毫秒delay
触发一个事件。 你可以有一个按钮调用.start()
或.stop()
请参阅此答案以了解Timer
的简单实现,该实现模仿Boggle游戏的一种秒表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.