Как правильно обрабатывать таймеры в Java?

Я хочу, чтобы мой таймер выполнял метод actionPerformed только один раз за 5 секунд, но он много раз записывал в консоли «Привет»:

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(); } } 

Как я могу сделать эффект, который я хочу? благодаря

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

 timer.setRepeats(false); 

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

Похоже, вам нужен java.util.Timer а не javax.swing.Timer .

 class MyTask extends TimerTask { public void run() { System.out.println("Hello"); } } 

а потом

 timer = new Timer(); timer.schedule(new MyTask(), 5000); 

Это должно сделать трюк!

 new JFrame().setVisible(true);