我在GUI类中执行itasser.run()
。但由于它本身就是一个完整的过程,publish(itasser.getTimeToFinish())
仅在itasser.run()
之后执行。
那么我可以在run()
完成时使用itasser.getTimeToFinish()或其他值吗?
我有许多其他对象,比如itasser,我将以相同的方式执行并更新GUI。
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 :(得分:0)
我会使用BackgroundWorker http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx来完成不同线程中的任务,然后使用委托来访问值。