我正在尝试使用Swing Timer重复打印一个语句但该语句不会被打印!
我犯的错是什么?
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
public class SwingTimer implements ActionListener {
Timer timer;
public static void main(String[] args) {
SwingTimer obj = new SwingTimer();
obj.create();
}
public void create() {
timer = new Timer(1000, this);
timer.setInitialDelay(0);
timer.start();
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Hello using Timer");
}
}
答案 0 :(得分:2)
javax.swing.Timer可能以守护程序线程开始:它不会保持jvm活动,主要结束,jvm退出。它将计时器事件发布到GUI事件队列,该队列在第一个对话框或框架可见时开始。
如果您根本不需要窗口系统,则必须创建一个JFrame并使其可见或使用java.util.Timer。
以下代码显示了如何使用java.util.Timer
:
import java.util.Timer;
import java.util.TimerTask;
public class TimerDemo extends TimerTask {
private long time = System.currentTimeMillis();
@Override public void run() {
long elapsed = System.currentTimeMillis() - time;
System.err.println( elapsed );
time = System.currentTimeMillis();
}
public static void main( String[] args ) throws Exception {
Timer t = new Timer( "My 100 ms Timer", true );
t.schedule( new TimerDemo(), 0, 100 );
Thread.sleep( 1000 ); // wait 1 seconde before terminating
}
}
答案 1 :(得分:2)
javax.swing.Timer
。目前,您的主Thread
正在退出,因为Timer
使用了守护程序Thread
。作为一种解决方法,您可以这样做:
public static void main(String[] args) {
SwingTimer obj = new SwingTimer();
obj.create();
JOptionPane.showMessageDialog(null, "Timer Running - Click OK to end");
}
非UI应用程序的替代方法是使用ScheduledExecutorService