繁体   English   中英

计时器任务仅运行一次

[英]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运行RemindTaskseconds秒(* 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM