定时器任务只运行一次

时间:2014-01-15 21:27:27

标签: java sockets timer task

如何让我的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();
    }
}

我希望这个计时器能够运行无限长的时间,直到发生异常。

2 个答案:

答案 0 :(得分:3)

当Javadoc说它以特定延迟重复时,延迟是TimerTask开始前的初始延迟,而不是TimerTask将运行多长时间。您可以每period毫秒重复该任务。查看schedule方法。下面是一个简单的例子,每2秒重复一次,无限期。在示例中,调用:

timer.schedule(new RemindTask(seconds), 0, seconds * 1000);

告诉timerRemindTask秒运行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模仿一种关于僵尸游戏的秒表的简单实现

相关问题