4
....

public class mainClass {
    public mainClass(){
        Timer time = new Timer();
        mainClass.calculate calculate = new mainClass.calculate();
        time.schedule(calculate, 1 * 1000);
    }

    public static void main(String[] args){
        new mainClass();
    }

    class calculate extends TimerTask{
        @Override
        public void run() {
            System.out.println("working..");

        }
    }
}

我在控制台中只看到一次“工作..”消息。我想看到每一秒“工作..”代码有什么问题?我的另一个问题是我想每秒运行我自己的方法,但是如何?

对不起我的英语不好..

4

5 回答 5

11

Timer.schedule(TimerTask task, long delay)仅在第二个参数中的毫秒数之后运行 TimerTask 一次。

要重复运行 TimerTask,您需要使用其他schedule()重载之一Timer.schedule(TimerTask task, long delay, long period),例如:

time.schedule(calculate, 1000, 1000);

它安排任务在 1000 毫秒后执行,并每 1000 毫秒重复一次。

于 2012-09-09T20:50:42.700 回答
2

根据文档,它应该是一次:

public void schedule(TimerTask task, long delay) 安排指定任务在指定延迟后执行。参数: task - 要调度的任务。delay - 任务执行前的延迟毫秒数。抛出: IllegalArgumentException - 如果延迟为负,或者延迟 + System.currentTimeMillis() 为负。IllegalStateException - 如果任务已被安排或取消,或者计时器被取消。

你可能想打电话

public void schedule(TimerTask task, long delay, long period)

于 2012-09-09T20:52:01.963 回答
1

您需要在主线程中等待计时器被触发。当所有非守护线程都完成时,JVM 将退出。运行你的 main 方法的线程实际上是唯一的非 damon 线程,所以你应该让它等到你的工作完成。

像这样更改您的主要方法:

 public static void main(String[] args){
     new mainClass();
     Thread.sleep(2 * 1000); // wait longer than what the timer 
                             // should wait so you can see it firing.
 }
于 2012-09-09T20:48:40.747 回答
1

你需要使用:

zaman.schedule(calculate, 0, 1000);

安排计时器运行不止一次。

于 2012-09-09T20:51:11.730 回答
0

您正在使用的版本Timer.schedule()仅在延迟后执行一次任务。您需要使用`Timer.schedule(TimerTask, long, long)使任务重复。

于 2012-09-09T20:53:44.377 回答