Java Swing Timer
Solution 1:
This simple program works for me:
import java.awt.event.*;
import javax.swing.*;
public class Test {
public static void main(String [] args) throws Exception{
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//...Perform a task...
System.out.println("Reading SMTP Info.");
}
};
Timer timer = new Timer(100 ,taskPerformer);
timer.setRepeats(false);
timer.start();
Thread.sleep(5000);
}
}
Solution 2:
This Program will work fine...
setRepeats(boolean flag)
function used to set call the function(actionPerformed)
repeatedly or only one time if
-
timer.setRepeats(false) == timer
calls the actionperformed method for only one time -
timer.setRepeats(true) == timer
calls the actionPerformed method repeatedly based on specified time
Swing Timer Work
- do the task one time
- do the task repeated time
steps to create swing timer:
- create the actionlistener
- create the timer constructor then pass time and actionlistener in that
- implement the
actionPerformed()
function in which do your task - use
timer.start()
for start the task between the time specified in timer constructor, usetimer.stop()
for stop the task
Example:
ActionListener al=new ActionListener() {
public void actionPerformed(ActionEvent ae) {
//do your task
if(work done)
timer.stop();//stop the task after do the work
}
};
Timer timer=new Timer(1000,al);//create the timer which calls the actionperformed method for every 1000 millisecond(1 second=1000 millisecond)
timer.start();//start the task
Solution 3:
Your task likely only needs to report results on the event thread (EDT) but do the actual work in a background thread at some periodic rate.
ScheduledExecutorService is EXACTLY what you want. Just remember to update the state of your UI on the EDT via SwingUtility.invokeLater(...)
Solution 4:
I'm guessing from the log statement that you're doing some sort of SMTP operation. I think I'm right in saying the java.swing.Timer
is intended for UI related timed operations, hence why it needs and EDT running. For more general operations you should use java.util.Timer
.
This article is linked from the JavaDocs - http://java.sun.com/products/jfc/tsc/articles/timer/