Java计时器不会运行

时间:2016-03-30 08:10:46

标签: java

所以我想每秒打印一个单词10秒,但没有任何效果 这是我的代码:

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

public class Main{

    public static void main (String[] args){

        class TimerListener implements ActionListener
        {
            public void actionPerformed(ActionEvent event)
            {
                System.out.println("helo");
            }
        }
        ActionListener dummy = new TimerListener();

        Timer power_up_time = new Timer(10000,dummy);
        power_up_time.addActionListener(dummy);
        power_up_time.start();

    }

}

编辑:所以我添加了启动功能,它仍然无法正常工作

4 个答案:

答案 0 :(得分:3)

我认为您需要start Timer才能使其发挥作用。

这样的事情:

    Timer timer = new Timer(500, new ActionListener() {
        public void actionPerformed(ActionEvent e) {

        }
    });
    timer.start();

答案 1 :(得分:2)

在较新版本的Java中(从过去十年左右)我建议使用ScehduledExecutorService

ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(() -> System.out.println("hello"), 0, 1, TimeUnit.SECONDS);
TimeUnit.SECONDS.sleep(10);
ses.shutdown();

答案 2 :(得分:1)

如果您发布的代码已完成,则您将在应用程序(即主线程)终止之前启动计时器。因此,调度程序将无法运行足够长的时间来执行计时器。

尝试在具有退出条件的循环中休眠或运行(这可能是你想要做的事情)。

答案 3 :(得分:0)

您没有初始化并启动Swing工具包,因此您的应用程序会立即终止。

如果你真的想使用Swing Timer,你需要至少显示一些窗口或对话框,以便Swing事件线程正在运行,例如将以下内容添加到main()方法的末尾:

SwingUtilities.invokeLater(new Runnable() {

    @Override
    public void run() {
        new JFrame("Frame title").setVisible(true);
    }
});

请参阅Swing以外的替代方案的其他答案。