为什么这不起作用?
我希望它每秒打印一次。
感谢。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
public class test2 {
public static void main(String[] args) {
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("hello");
}
});
timer.start();
}
}
答案 0 :(得分:6)
您的程序会在计时器运行一次之前终止。当main方法终止时,程序终止,所有线程也将终止。这包括你的计时器线程。
尝试以下方法:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
public class test2 {
public static void main(String[] args) {
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("hello");
}
});
timer.start();
}
while (true) /* no operation */;
}
}
答案 1 :(得分:1)
计时器可能是在守护程序线程中启动的,启动后立即完成主线程。
只有剩余守护程序线程,JVM可能/必须终止。所以你需要让主线保持活力。出于测试目的,简单Thread.sleep(10000);
应该做得很好。
答案 2 :(得分:0)
在调用start
后,没有任何东西阻止您的代码立即退出。在Thread.sleep(10000);
之后添加timer.start();
,您会看到打印的消息。
答案 3 :(得分:0)
因为您的程序将在主线程完成后立即退出,并且由于计时器在单独的线程上运行,因此没有时间执行。在main方法结束之前添加Thead.Sleep调用将执行您的代码。
答案 4 :(得分:-1)
您正在使用接口库(java.awt
)来编写控制台应用程序。
试试这个:
public static void main(String[] args) throws Exception {
while(true){
Thread.sleep(1000);
System.out.println("hello");
}
}