繁体   English   中英

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

[英]actionListener interfaces actionPerformed method not working with Timer class

以下程序假定每秒打印一次日期。 但是,由于已知的原因,此方法不起作用。

我已经在以下类和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();
    }
}

您需要在非守护线程上执行代码。 当前发生的事情是, 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具有一个非守护线程,可以灵活地创建 每个计时器都有自己的线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM