2013-08-25 7 views
1

내 문제는 : 나는 두 블록의 코드를 가지고있다. 하나의 블록은 타이머가 10 초에 이르렀을 때만 실행된다. 그래서 나는 코드 조각으로 TimerTask를 호출한다. 다른 코드 블록은 내가 수행 할 때만 실행한다. 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 :

나는 시도 문제는이 코드 가지고있다 : 사용자가 나는 기본 메시지를 인쇄 10 초 동안 모든 메시지를 입력하지 않을 경우 그는 10 초까지 메시지를 입력 한 경우,

messageOut = userInput.readLine(); 

내가 원하는을, 나는 그의 메사를 인쇄 ge. 문제는 내가

+0

한 가지 방법 :이 상태를 변경할 때 청취자에게 통지 할 수 있도록 작업 속성 변경 지원에서 실행되는 코드를 제공합니다. –

답변

1

당신은하고이 결과 취소하는 경우에만 경우 사실입니다 boolean 값을 반환 TimerTask.cancel()를 사용하여 TimerTask를 취소를 시도 할 수 있습니다 .. 항목을 기다리고, userInput.readLine()에 집착한다 작업 실행되지 않고 예정 거짓 그렇지

+0

의견에 대한 제 제안보다 낫습니다. 1+ –

+0

이상한,하지만 난 코드를 실행하려고 여기 –

+1

허용되지 않는 유형 '무효'@ : 오류 : 경우를 (timer.cancel() == TRUE) { ... } 나는 오류를 얻었다 ChristianeOkamoto 당신은'TimerTask'를 취소 한'Timer'를 취소하지 않습니다. – Dev

0

난 당신이 아니라이 목적을 위해 ScheduledExecutorServiceFutureTask를 사용한다고 생각합니다 (작업이 이미 해고하고 진행이 될 수도 있고, 이미 run() 방법으로 수행 의미). FutureTask은 완료되었는지 확인하는 isDone 방법이 있습니다. TimerTaskRunnable를 구현하기 때문에, 당신은 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 나는 질문을 오해했다 : 체크 [this] (http://stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-inputstream-with-a-timeout) 질문 – Katona

관련 문제