为什么我的java计时器在看似随机的迭代次数后会停止?

时间:2014-07-12 19:23:15

标签: java timer

我正在尝试创建一个简单的java程序,它将无限期地运行并每秒输出一个数字。我相信我的代码应该这样做;然而,它在变量i变为2,3或4之后停止。随机。它大部分时间都达到了3.我不认为程序停止是基于我的,但我可能会忽视它。

所有这个程序需要做的是使用计时器吐出第二个计数。我觉得我的代码可能有点过于复杂,所以如果我的代码太难,请告诉我。

package testing;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.SwingUtilities;
import javax.swing.Timer;

public class driver {

    static int delay = 1000; //milliseconds 
    private Timer timer;
    int i = 0;
    public driver(){
        ActionListener taskPerformer = new ActionListener() {
              public void actionPerformed(ActionEvent evt) {
                  System.out.println(i);
                  i++;
              }
          };
        timer = new Timer(delay, taskPerformer);
        timer.setInitialDelay(0);
        timer.start();
    }

    public static void main(String args[]){
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new driver();
            }
        });
    }

}

1 个答案:

答案 0 :(得分:4)

你的计划中的一切都是正确的,但只有一个。

您的程序启动(显然从main())启动计时器,计时器方法启动每秒显示时间/数字的过程,然后主线程死亡!导致完成程序执行。

所以为了避免这种情况,你只需要保持主线程忙。

这是最简单的方法:

public static void main(String args[]){
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                driver d = new driver();
            }
        });
        for(;;); // <-- **Check this out :D**
    }