2014-09-14 3 views
0

Я выполняю 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(); 
+0

Посмотрите на java.util.concurrent.ThreadPoolExecutor –

ответ