Java Swing Timer

2022-09-03 05:19:52
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();

根据文档,此计时器应触发一次,但永远不会触发。我需要它来发射一次。


答案 1

这个简单的程序对我有用:

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

答案 2

该程序将正常工作...

setRepeats(boolean flag)函数用于设置重复调用或仅一次,如果function(actionPerformed)

  1. timer.setRepeats(false) == timer仅调用一次操作执行方法
  2. timer.setRepeats(true) == timer根据指定的时间重复调用 actionPerformed 方法

摆动计时器工作

  1. 执行任务一次
  2. 做任务重复时间

创建摆动计时器的步骤:

  1. 创建操作列表
  2. 创建计时器构造函数,然后传递时间和操作列表器
  3. 实现执行任务的函数actionPerformed()
  4. 用于在计时器构造函数中指定的时间之间启动任务,用于停止任务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