2013-08-25 3 views
1

Моя проблема: у меня есть два блока кода. Один блок выполняется только в том случае, если таймер достиг десятисекунд. Поэтому я вызываю TimerTask с куском кода. Другой блок кода, который я выполняю, только если я не знаю, t войти в функцию TimerTask .. (функция run()). Есть ли способ узнать, завершилось ли выполнение TimerTask его выполнение, например, например, возврат логической переменной? Я программирую на Java.Есть ли способ узнать, завершена ли timerTask?

Я пробовал:

TimerTask emd = new EsperaMensagemDigitada(outgoing, incoming); 
timer.schedule(emd, 10000); 
if(emd.cancel() == true){ 
    messageOut = userInput.readLine();    
    outgoing.println(messageOut + "   [Sua vez]"); 
    System.out.println("Aguardando resposta..."); 
    outgoing.flush();  
} 

но мне кажется, что он всегда будет выполнять код внутри если clausure .. так что я dind't решить мою проблему еще ..

Другая часть этого проблема в том, что у меня есть этот код:

messageOut = userInput.readLine(); 

Я хочу, если пользователь не вводит никаких сообщений в течение 10 секунд я печатаю сообщение по умолчанию, если он не введет сообщение до 10 секунд, я печатаю его MESSA GE. Проблема я застреваю на userInput.readLine(), ожидая запись ..

+0

Один из способов: дайте код работает в поддержке задачи изменения свойств, так что вы можете уведомить слушатель, когда он изменяет состояние. –

ответ

1

Вы можете попытаться отменить TimerTask с помощью TimerTask.cancel() который возвращает boolean значения, которое верно тогда и только тогда, когда отмените привел к Запланированное задание не выполняется и ложный иначе (то есть задача уже уволена и может быть в процессе или уже сделана с помощью метода run())

+0

Это выглядит лучше, чем мое предложение в комментарии. 1+ –

+0

странно, но когда я попытался выполнить код: если (timer.cancel() == TRUE) { ... } я получил ошибку: ошибка: 'пустота' Недопустимый тип здесь –

+1

@ ChristianeOkamoto Вы не отменяете «Таймер», вы отменяете «TimerTask». – Dev

0

Я думаю, вы скорее должны использовать FutureTask с ScheduledExecutorService для этой цели. FutureTask имеет метод isDone, чтобы проверить, завершено ли оно. Поскольку TimerTask реализует Runnable, вы можете обернуть свою задачу довольно легко в FutureTask:

FutureTask<?> futureTask = new FutureTask<Void>(timerTask, null); 
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
scheduler.schedule(futureTask, 10, TimeUnit.SECONDS); 
if (futureTask.isDone()) { 
    // ... 
} 
+0

Я до сих пор его не понимаю .. :( Моя проблема в том, что у меня есть этот код: messageOut = userInput.readLine(); Я хочу, если пользователь не вводит какое-либо сообщение в течение 10 секунд, я печатаю сообщение по умолчанию, если он ввел сообщение до 10 секунд, я печатаю его сообщение. Проблема в том, что я застрял в userInput.readLine(), ожидая запись .. –

+0

@ChristianeOkamoto Я неправильно понял вопрос: проверьте [это] (http://stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-inputstream-with-a-timeout) вопрос тогда – Katona