java定时器赢得';行不通
为什么这样不行 我希望它每秒钟打印一次 谢谢java定时器赢得';行不通,java,timer,Java,Timer,为什么这样不行 我希望它每秒钟打印一次 谢谢 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() {
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();
}
}
您正在使用接口库(
java.awt
)编写控制台应用程序
试试这个:
public static void main(String[] args) throws Exception {
while(true){
Thread.sleep(1000);
System.out.println("hello");
}
}
在调用
start
后,没有任何东西可以阻止您的代码立即退出。添加线程睡眠(10000)代码>在定时器.start()之后代码>之后,您将看到打印的消息。可能计时器是在守护进程线程中启动的,启动后,主线程立即完成
只要只剩下守护进程线程,JVM就可能/必须终止。因此,您需要保持主线程处于活动状态。出于测试目的,一个简单的线程睡眠(10000)代码>应该很好。您的程序在计时器运行一次之前就终止了。当主方法终止时,程序终止,所有线程也将终止。这包括您的计时器线程
请尝试以下操作:
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 */;
}
}
因为您的程序将在主线程完成后很快退出,并且由于计时器在单独的线程上运行,所以它没有时间执行。在主方法结束之前添加一个Thead.Sleep调用将执行您的代码。这可能是GUI应用程序的起点,减少到不按预期工作的最低代码量。您的答案的可能副本在概念上是正确的,但是请注意,swing计时器不会在单独的守护程序线程上运行。而是从事件调度线程检查它们。感谢您的更正。我已经七年没有和Swing一起工作了谢谢,这很有效,但还有其他解决方案吗?