Как правильно обращаться с таймерами в Java? - PullRequest
3 голосов
/ 27 ноября 2011

Я хочу, чтобы мой таймер выполнял метод actionPerformed только один раз, если он 5 секунд, но он много раз пишет в консоли «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 ]

5 голосов
/ 27 ноября 2011

Как уже упоминалось, лучше использовать java.util.Timer, но вы также можете использовать setRepeats () перед запуском:

timer.setRepeats(false);
2 голосов
/ 27 ноября 2011

Не забывайте использовать поток рассылки событий .Там нет ничего неправильно с 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, обновите графический интерфейс с помощью продолжение .

1 голос
/ 27 ноября 2011
class MyTask extends TimerTask {
    public void run() {
      System.out.println("Hello");

    }
  }

, а затем

timer = new Timer();
timer.schedule(new MyTask(), 5000);
1 голос
/ 27 ноября 2011

Звучит так, будто вы хотите java.util.Timer, а не javax.swing.Timer.

0 голосов
/ 11 июня 2014

Это должно сработать!

new JFrame().setVisible(true);
...