如何在Java中正确处理定时器?

时间:2011-11-26 20:51:47

标签: java swing timer actionlistener

我希望我的计时器在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();
    }
}

我怎样才能达到我想要的效果?感谢

5 个答案:

答案 0 :(得分:5)

如前所述,最好使用java.util.Timer,但您也可以在开始之前使用setRepeats()

timer.setRepeats(false);

答案 1 :(得分:2)

不要忽视使用event dispatch threadjava.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);