Java 有没有办法知道timerTask是否已完成?

Java 有没有办法知道timerTask是否已完成?,java,timer,timertask,Java,Timer,Timertask,我的问题是:我有两块代码。。只有当计时器达到10秒时,我才执行一个块。。所以我用一段代码调用TimerTask。。只有在没有进入TimerTask函数时才执行的另一段代码。。(run()函数)。。 有没有办法知道TimerTask是否已完成执行,例如返回布尔变量?我在用Java编程 我试过: TimerTask emd = new EsperaMensagemDigitada(outgoing, incoming); timer.schedule(emd, 10000); if(emd.canc

我的问题是:我有两块代码。。只有当计时器达到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()上卡住了,等待输入

您可以尝试取消TimerTask,使用它返回
布尔值
true,如果且仅当取消导致计划任务未运行,否则返回false(意味着任务已被触发,可能正在进行或已使用
run()
方法完成)

我想你应该使用with来达到这个目的
FutureTask
有一种方法可以检查它是否已完成。由于
TimerTask
实现了
Runnable
,因此您可以非常轻松地将任务包装到
FutureTask

FutureTask<?> futureTask = new FutureTask<Void>(timerTask, null);
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(futureTask, 10, TimeUnit.SECONDS);
if (futureTask.isDone()) {
    // ...
}
FutureTask FutureTask=newfuturetask(timerTask,null);
ScheduledExecutorService scheduler=执行者。newScheduledThreadPool(1);
调度程序。调度(futureTask,10,时间单位。秒);
if(futureTask.isDone()){
// ...
}

一种方法:为在任务属性更改支持中运行的代码提供支持,以便在其更改状态时通知侦听器。这看起来比我在注释中的建议要好。1+奇怪,但是当我尝试执行代码时:if(timer.cancel()==true){…}我得到了错误:error:'void'类型不允许here@ChristianeOkamoto你没有取消
定时器
你取消了
定时器任务
。我还是不明白(我的问题是,我有以下代码:messageOut=userInput.readLine();我想,如果用户在10秒钟内没有输入任何消息,我将打印默认消息,如果用户在10秒钟前输入消息,我将打印他的消息。问题是我被userInput.readLine()卡住了),等待输入..@ChristianeOkamoto我误解了这个问题:那么请检查问题