Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的java计时器在看似随机的迭代次数后停止?_Java_Timer - Fatal编程技术网

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

为什么我的java计时器在看似随机的迭代次数后停止?,java,timer,Java,Timer,我正在尝试创建一个简单的java程序,它将无限期运行并每秒输出一个数字。我相信我的代码应该做到这一点;但是,它在变量i到达2、3或4后停止。随机。大多数时候它都会达到3。我不认为程序停止是基于I的,但我可能忽略了一些东西 这个程序所需要做的就是用定时器吐出第二次计数。我觉得我的代码可能有点太复杂了,所以如果我太难了,请告诉我 package testing; import java.awt.event.ActionEvent; import java.awt.event.ActionListe

我正在尝试创建一个简单的java程序,它将无限期运行并每秒输出一个数字。我相信我的代码应该做到这一点;但是,它在变量i到达2、3或4后停止。随机。大多数时候它都会达到3。我不认为程序停止是基于I的,但我可能忽略了一些东西

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

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();
            }
        });
    }

}

在你的程序中,每件事都是正确的,只有一件

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

因此,为了避免这种情况,您只需让主线程保持忙碌即可

以下是最简单的方法:

public static void main(String args[]){
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                driver d = new driver();
            }
        });
        for(;;); // <-- **Check this out :D**
    } 
publicstaticvoidmain(字符串参数[]){
SwingUtilities.invokeLater(新的Runnable()
{
@凌驾
公开募捐
{
驱动程序d=新驱动程序();
}
});

对于(;;);//可能相关:这真的很有趣。我从来没有想过。谢谢!解释得很好!当“1个新问题”图标出现时,我实际上正在键入几乎完全相同的东西哈哈!快告诉我:感谢解释。现在完全有意义了。(程序工作!)不过有一个问题,你有没有因为什么原因给新司机起名字?是的..ide发出警告:)(不过没必要)