Я выполняю itasser.run()
в моем классе GUI. Но поскольку это полный процесс, publish(itasser.getTimeToFinish())
выполняется только после itasser.run()
.Как получить значения из другой текущей нити?
Так есть способ, которым я могу использовать itasser.getTimeToFinish() или другие значения, в то время как run()
завершает?
У меня есть много других объектов, таких как itasser, которые я буду выполнять так же, и обновить графический интерфейс.
final ITasser itasser = new ITasser();
itasser.setInput(getString1(), getString1(), getString1());
SwingWorker<ProcessStatus, Integer> worker =
new SwingWorker<ProcessStatus, Integer>()
{
@Override
protected ProcessStatus doInBackground() throws Exception {
itasser.run(); //complete task
publish(itasser.getTimeToFinish()); //??? problem
//executes only after itasser.run() completes
return itasser.getStatus();
}
@Override
protected void process(List<Integer> chunks) {
// display remaining time on GUI
}
@Override
protected void done() {
if(get() == ProcessStatus.FINISHED)
itasser.getOutput(); //do something with output
}
};
worker.execute();
Посмотрите на java.util.concurrent.ThreadPoolExecutor –