我希望我的计时器在5秒时间内只执行一次actionPerformed方法,但它在控制台“Hello”中写了很多次:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
public class X{
public static void main(String args[]) {
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
System.out.println( "Hello" );
}
};
Timer timer = new Timer( 5000, actionListener );
timer.start();
}
}
我怎样才能达到我想要的效果?感谢
答案 0 :(得分:5)
如前所述,最好使用java.util.Timer
,但您也可以在开始之前使用setRepeats():
timer.setRepeats(false);
答案 1 :(得分:2)
不要忽视使用event dispatch thread。 java.util.Timer
没有错误,但javax.swing.Timer
与Swing有几个优势。
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
public class X {
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
System.out.println("Hello");
}
};
Timer timer = new Timer(5000, actionListener);
timer.start();
}
});
}
}
如果使用java.util.Timer
,请使用continuation更新GUI。
答案 2 :(得分:1)
听起来你想要一个java.util.Timer
而不是javax.swing.Timer
。
答案 3 :(得分:1)
class MyTask extends TimerTask {
public void run() {
System.out.println("Hello");
}
}
然后
timer = new Timer();
timer.schedule(new MyTask(), 5000);
答案 4 :(得分:0)
这应该可以做到!
new JFrame().setVisible(true);