2013-08-25 174 views
1

我的問題是:我有兩塊代碼..我只有在定時器達到10秒時才執行一個塊..所以我使用這段代碼調用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.cancel()返回boolean值是當且僅當該取消導致一個TimerTask計劃任務不運行和否則(意味着任務已經被解僱,可能正在進行或已經與run()方法完成)

+0

這看起來比我在評論中的建議要好。 1+ –

+0

奇怪,但是當我試圖執行代碼: 如果(timer.cancel()==真){ ... } 我得到了錯誤:錯誤:「無效」類型不在這裏 –

+1

不允許@ ChristianeOkamoto你不取消'Timer'你取消'TimerTask'。 – Dev

0

我認爲你應該寧願使用FutureTaskScheduledExecutorService用於這一目的。 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我誤解了這個問題:check [this](http://stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-inputstream-with-a-timeout )然後問題 – Katona

相關問題