![](/img/trans.png)
[英]How to access local variables in anonymous inner actionListener class and actionPerformed method?
[英]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.