ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//...Perform a task...
logger.finest("Reading SMTP Info.");
}
};
Timer timer = new Timer(100 ,taskPerformer);
timer.setRepeats(false);
timer.start();
根据文档此计时器应该解雇一次,但它永远不会触发。 我需要它来触发一次。
这个简单的程序为我工作:
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);
}
}
该计划将正常工作...
setRepeats(boolean flag)
用于设定调用函数function(actionPerformed)
反复或者,如果只有一个时间
-
timer.setRepeats(false) == timer
调用actionPerformed方法仅一次 -
timer.setRepeats(true) == timer
调用actionPerformed方法反复基于指定时间
摆动定时器工作
- 做任务一次
- 做任务的重复时间
步骤来创建摇摆定时器:
- 创建的ActionListener
- 创建计时器构造然后通过时间和ActionListener的在
- 实现
actionPerformed()
中做你的任务功能 - 使用
timer.start()
用于启动定时器的构造,使用指定的时间之间的任务timer.stop()
用于停止任务
例:
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
你的任务可能只需要报告事件线程(EDT)上的结果,但在一些周期性的速度做在后台线程的实际工作。
ScheduledExecutorService的 正是你想要的。 只要记住通过SwingUtility.invokeLater以更新EDT UI的状态(...)
我是从你正在做某种SMTP操作的日志语句猜测。 我想我没有说错的java.swing.Timer
是用于UI相关的定时操作,因此为什么它需要和EDT运行。 对于更一般的操作,你应该使用java.util.Timer
。
本文从JavaDoc中联- http://java.sun.com/products/jfc/tsc/articles/timer/