actionListener接口actionPerformed方法不能与Timer类一起使用

时间:2016-07-02 01:44:28

标签: java date actionlistener

以下程序假设每秒打印一次日期。然而,由于一个已知的原因,这不起作用。

我在以下类和actionPerformed方法中实现了ActionListener接口:

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

public class CurrentTimePrinter implements ActionListener{

        public void actionPerformed(ActionEvent e){
        System.out.println(new Date());

    }
}

这是测试人员类:

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


public class CurrentTimePrinterTester {

    public static void main(String[] args) {
        ActionListener listener = new CurrentTimePrinter();

        Timer t = new Timer(1000, listener);
        t.start();
    }
}

1 个答案:

答案 0 :(得分:2)

您需要在non-daemon thread上执行代码。目前发生的是Timer作为守护程序线程启动,但是main返回JVM退出。

您可以从EDT(非守护进程)启动计时器,如下所示:

public static void main(String[] args) {

    ActionListener listener = new CurrentTimePrinter();
    SwingUtilities.invokeLater(() -> new Timer(1000, listener).start());
}

这可以使JVM保持活跃状态​​。

关于线程的一些额外说明:

swing.Timer是一个简化的类,可以自定义用于GUI。这带来了灵活性较差的缺点。所有这些定时器运行的线程都在后台设置并且是守护进程。

util.Timer默认情况下是非守护程序线程,可灵活地为created otherwise。每个计时器都有自己的线程。