Java 回转计时器未启动
我正在尝试使用Swing计时器重复打印语句,但该语句无法打印 我犯了什么错误Java 回转计时器未启动,java,swing,Java,Swing,我正在尝试使用Swing计时器重复打印语句,但该语句无法打印 我犯了什么错误 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; public class SwingTimer implements ActionListener { Timer timer; public stati
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");
}
}
计时器可能以守护进程线程的形式启动:它不会让jvm保持活动状态,也不会让jvm退出。它将计时器事件发布到GUI事件队列,该队列在第一个对话框或框架可见时启动 您必须创建一个JFrame,并使其可见,或者如果根本不需要窗口系统,则使用 以下代码显示了如何使用:
javax.swing.Timer
只能在使用swing应用程序时使用。当前主线程
正在退出,因为计时器
使用守护进程线程
。作为一种解决方法,您可以:
public static void main(String[] args) {
SwingTimer obj = new SwingTimer();
obj.create();
JOptionPane.showMessageDialog(null, "Timer Running - Click OK to end");
}
非UI应用程序的另一种选择是使用我尝试了你的代码,但打印会随机停止!有时10秒后,有时4秒!是的,你说得对!我尝试在timer.start()之后调用Thread.sleep(50000),结果成功了!我在timer.start()之后也试过了,它也起作用了!长计数=0;对于(长i=0;i<100000000;i++)计数++;最后想想
java.util.Timer
或ScheduledExecutorService
会更干净:)我使用了java.util.Timer,它工作得很好!但我想问的是,我不能在非Gui应用程序上使用swing.Timer吗?Gui有事件队列,并且计时器事件发布在Gui事件队列上。有趣的是,如何在同一时间爬行:-)
public static void main(String[] args) {
SwingTimer obj = new SwingTimer();
obj.create();
JOptionPane.showMessageDialog(null, "Timer Running - Click OK to end");
}