Добавление функции тайм-аута работнику качания - PullRequest
3 голосов
/ 13 февраля 2012

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

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

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

Ответы [ 2 ]

5 голосов
/ 13 февраля 2012

Javadocs для SwingWorker предлагает следующее:

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

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

Отправьте 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 */
}
2 голосов
/ 13 февраля 2012

Использовать Swing Timer ?

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

...