Добавление функции тайм-аута работнику качания
Вскоре мне нужно будет реализовать некоторые функции в моем приложении, которые превысят время ожидания работника на основе заданной пользователем длины.
Мне было интересно, смогу ли я расширить класс 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 */
}