java计时器将无法正常工作

时间:2011-08-03 07:40:21

标签: java timer

为什么这不起作用?

我希望它每秒打印一次。

感谢。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

public class test2 {

public static void main(String[] args) {

    Timer timer = new Timer(1000, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.out.println("hello");
        }
    });

    timer.start();
    }
}

5 个答案:

答案 0 :(得分:6)

您的程序会在计时器运行一次之前终止。当main方法终止时,程序终止,所有线程也将终止。这包括你的计时器线程。

尝试以下方法:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

public class test2 {

    public static void main(String[] args) {

        Timer timer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("hello");
            }
        });

        timer.start();
        }

        while (true) /* no operation */;
    }
}

答案 1 :(得分:1)

计时器可能是在守护程序线程中启动的,启动后立即完成主线程。

只有剩余守护程序线程,JVM可能/必须终止。所以你需要让主线保持活力。出于测试目的,简单Thread.sleep(10000);应该做得很好。

答案 2 :(得分:0)

在调用start后,没有任何东西阻止您的代码立即退出。在Thread.sleep(10000);之后添加timer.start();,您会看到打印的消息。

答案 3 :(得分:0)

因为您的程序将在主线程完成后立即退出,并且由于计时器在单独的线程上运行,因此没有时间执行。在main方法结束之前添加Thead.Sleep调用将执行您的代码。

答案 4 :(得分:-1)

您正在使用接口库(java.awt)来编写控制台应用程序。

试试这个:

public static void main(String[] args) throws Exception {
     while(true){
         Thread.sleep(1000);
         System.out.println("hello");
     }
}