Мне нужно многократно выполнять задачу, которая затрагивает объекты, связанные как с графическим интерфейсом, так и без него. Одно предостережение заключается в том, что никакое действие не должно выполняться, если предыдущее задание не было выполнено при запуске следующего события таймера.
Сначала я хочу использовать SwingTimer в сочетании с объектом javax.swing.SwingWorker. Общая установка будет выглядеть следующим образом.
class
{
timer = new Timer(speed, this);
timer.start();
public void actionPerformed(ActionEvent e)
{
SwingWorker worker = new SwingWorker() {
@Override
public ImageIcon[] doInBackground() {
// potential long running task
}
@Override
public void done() {
// update GUI on event dispatch thread when complete
}
}
}
Некоторые потенциальные проблемы, которые я вижу при таком подходе:
1) Несколько SwingWorkers будут активны, если работник не завершил работу до следующего запуска ActionEvent по таймеру.
2) SwingWorker предназначен для выполнения только один раз, поэтому удержание ссылки на работника и повторное использование (не так ли?) Жизнеспособного варианта.
Есть ли лучший способ добиться этого?