Я хочу, чтобы мой таймер выполнял метод 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);