Добавление функции тайм-аута работнику качания

Вскоре мне нужно будет реализовать некоторые функции в моем приложении, которые превысят время ожидания работника на основе заданной пользователем длины.

Мне было интересно, смогу ли я расширить класс Swingworker и добавить свой собственный отсчет времени ожидания, например, я мог бы переопределить метод dowork, вызвать startCountdown(), затем вызвать super.dowork, а затем продолжать проверять, превышено ли время ожидания?

Мне было интересно, есть ли лучшее решение, чем этот подход? Спасибо

2 ответа

Решение

Использовать таймер качания?

Если это происходит, время превышено. Отмените это до этого, чтобы остановить это.

Javadocs для SwingWorker предлагают это:

Поскольку SwingWorker реализует Runnable, SwingWorker может быть передан Исполнителю для выполнения.

Это было бы простым решением для желаемой функции тайм-аута.

Отправьте ваш SwingWorker в ExecutorService # submit. На полученном Future<?>Вы можете реализовать тайм-аут в 10 секунд

Future<?> f = service.submit(mySwingWorker);
try {
    f.get(10, TimeUnit.SECONDS);
} catch (ExecutionException ex) {
    /* SwingWorker threw an Exception */
} catch (TimeoutException ex) {
    /* SwingWorker timed out */
} catch (InterruptedException ex) {
    /* Thread got interrupted */
} catch (CancellationException ex) {
    /* would only be thrown in case you
       call #cancel on your future */
}
Другие вопросы по тегам