如何让我的Timer任务多次运行?这真让我烦恼..
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();
}
}
我希望这个计时器能够运行无限长的时间,直到发生异常。
答案 0 :(得分:3)
当Javadoc说它以特定延迟重复时,延迟是TimerTask
开始前的初始延迟,而不是TimerTask
将运行多长时间。您可以每period
毫秒重复该任务。查看schedule
方法。下面是一个简单的例子,每2秒重复一次,无限期。在示例中,调用:
timer.schedule(new RemindTask(seconds), 0, seconds * 1000);
告诉timer
每RemindTask
秒运行seconds
(* 1000因为这里的时间实际上是毫秒),初始延迟为0 - 即启动RemindTask 马上,然后定期重复。</ p>
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");
}
}
答案 1 :(得分:0)
在我看来,你正在运行一个GUI程序(我正在考虑SWING,因为你正在使用SWING的另一个问题)。所以这里有一些建议。使用javax.swing.Timer
进行Swing程序。
“如何让我的计时器任务多次运行?”
javax.swing.Timer
包含方法.stop()
和.start()
以及.restart()
。 Timer
对象的基本实现就像这样
Timer timer = new Timer(delay, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// do something
}
});
timer.start();
您可以在actionPerformed
中执行任何操作,并且每隔几毫秒就会向delay
发送一个事件。您可以拨打.start()
或.stop()
请参阅this answer,了解Timer
模仿一种关于僵尸游戏的秒表的简单实现