How to handle Timers correctly in Java?
15,881
Solution 1
As already mentioned, it's better to use java.util.Timer
, but you can also use setRepeats() before starting:
timer.setRepeats(false);
Solution 2
Don't neglect to use the event dispatch thread. There's nothing wrong with java.util.Timer
, but javax.swing.Timer
has several advantages with 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();
}
});
}
}
If using java.util.Timer
, update the GUI using a continuation.
Solution 3
Sounds like you want a java.util.Timer
rather than a javax.swing.Timer
.
Solution 4
class MyTask extends TimerTask {
public void run() {
System.out.println("Hello");
}
}
and then
timer = new Timer();
timer.schedule(new MyTask(), 5000);
Author by
Rama
Updated on June 14, 2022Comments
-
Rama almost 2 years
I want my timer to execute the actionPerformed method only one time once it 5 seconds the time but it is writing in the console "Hello" lots of times:
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(); } }
How can I make the effect I want? Thanks