Timer timer = new Timer(200, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("boo");
}
});
timer.start();
Thread.sleep(3000);
boo将按预期每200毫秒打印一次。
虽然
Timer timer = new Timer(200, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("boo");
}
});
timer.start();
什么都不会输出!
答案 0 :(得分:3)
据推测,您展示的代码位于main()
。当main()
返回时,程序在计时器线程有机会开始之前退出。 sleep为JVM提供了足够的时间来创建另一个线程,然后允许JVM继续运行。
答案 1 :(得分:1)
可能是Thread.sleep
在main
线程上,并且在第二种情况下没有打印的原因是main
线程消失了,程序退出了吗? / p>
答案 2 :(得分:1)
这是完整的程序(是main
方法中唯一的代码吗?)如果是,则在第二种情况下程序在计时器关闭之前结束,因此它不会打印任何内容,因为程序几乎立即完成。
答案 3 :(得分:1)
1)此代码在所有情况下都是正确的
Timer timer = new Timer(200, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("boo");
}
});
timer.start();
你必须检查javax.swing.Timer#setRepeats()是否有真值(默认值),如果没有更改,否则你有一个阻止Event Dispatch Thread的代码,然后是Swing's Timer
,
2)在EDT期间不要使用Thread.sleep(int)
,直到睡眠结束导致EDT的代码块,