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

标签 java timer

我正在尝试创建一个简单的 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**
    } 

关于java - 为什么我的 Java 计时器在看似随机的迭代次数后停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24716501/

相关文章:

java - Spring:在实例化最终字段的 Autowiring 构造函数中使用应用程序属性

java - 在 Spring 中将对象列表转换为页面

c - 主从配置中的 STM32 奇数定时器 1 行为 - mb 代码问题

Java Swing 忽略 repaint()?

java - 如何将字符串中的日期转换为 Sql 日期?

java - 如何在 Java 中迭代每个纬度/经度

java - 为 SpringBootTest 动态添加属性源

python - Python 中的定时器

c++ - boost::asio::deadline_timer cancel() 方法未调用计时器处理程序

javascript - 衡量用户在网站访问期间花费的时间