9

Вопрос по swing, java – Java Swing Timer

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

4 ответа

1

Ваша задача, скорее всего, нужно толькоreport результаты в потоке событий (EDT), но выполняют фактическую работу в фоновом потоке с некоторой периодической частотой.

ScheduledExecutorService являетсяEXACTLY то, что ты хочешь. Просто не забудьте обновить состояние вашего пользовательского интерфейса в EDT через SwingUtility.invokeLater (...)

2

Эта программа будет работать нормально ...

setRepeats(boolean flag) функция, используемая для установки вызоваfunction(actionPerformed) повторно или только один раз, если

  1. timer.setRepeats(false) == timer calls the actionperformed method for only one time
  2. timer.setRepeats(true) == timer calls the actionPerformed method repeatedly based on specified time

Swing Timer Work

  1. do the task one time
  2. do the task repeated time

steps to create swing timer:

  1. create the actionlistener
  2. create the timer constructor then pass time and actionlistener in that
  3. implement the actionPerformed() function in which do your task
  4. use timer.start() for start the task between the time specified in timer constructor, use timer.stop() for stop the task

Пример:

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
1

Я предполагаю из оператора log, что вы выполняете какую-то операцию SMTP. Я думаю, что я прав, говоряjava.swing.Timer предназначен для связанных по времени операций, связанных с пользовательским интерфейсом, поэтому он необходим и работает EDT. Для более общих операций вы должны использоватьjava.util.Timer.

Эта статья связана с JavaDocs -http://java.sun.com/products/jfc/tsc/articles/timer/

18

Эта простая программа работает для меня:

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

Похожие вопросы