1

我的问题是:我有两个代码块..只有当计时器达到 10 秒时我才执行一个块..所以我用这段代码调用 TimerTask..另一个代码块只有在我没有得到时才执行进入 TimerTask 函数..(run() 函数).. 有没有办法知道 TimerTask 是否已完成执行,例如返回一个布尔变量?我正在用 Java 编程。

我试过了:

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();    
}

但似乎它总是会执行 if 子句中的代码..所以我还没有解决我的问题..

这个问题的另一部分是我有这个代码:

messageOut = userInput.readLine();

我想,如果用户在 10 秒内没有输入任何消息,我会打印一条默认消息,如果他在 10 秒内输入了一条消息,我会打印他的消息。问题是我卡在 userInput.readLine() 上,等待输入..

4

2 回答 2

1

You can attempt to cancel the TimerTask using TimerTask.cancel() which returns boolean value that is true if and only if the cancel resulted in the scheduled task not running and false otherwise (meaning the task has already been fired and may be in progress or already done with the run() method)

于 2013-08-25T17:46:59.850 回答
1

我认为您应该为此目的将FutureTaskScheduledExecutorService一起使用。FutureTask有一个isDone方法来检查它是否完成。由于TimerTaskimplements Runnable,您可以很容易地将您的任务包装在FutureTask

FutureTask<?> futureTask = new FutureTask<Void>(timerTask, null);
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(futureTask, 10, TimeUnit.SECONDS);
if (futureTask.isDone()) {
    // ...
}
于 2013-08-25T18:38:11.093 回答