Я разрабатываю приложение для качелей. В этом у меня есть рабочий процесс работы, которые нужно сделать.
Я запускаю эти задания в цикле for одно за другим. Интересно, что мне нужно обновить строку состояния графического интерфейса с текущим именем задания.
Я не могу использовать SwingUtilities.invokeAndWait, так как он не может работать в потоке отправки, который будет текущим потоком.
Я попытался использовать SwingWorker, так как задания выполняются в цикле, метод SwingWorker doBackGrount() будет выполняться, выйдет и получит следующий индекс для запуска следующего задания. В done() SwingWorker я написал код для обновления графического интерфейса со статусом.
public class TestAction extends SwingWorker<Boolean, Void> {
boolean executeThread = false;
public TestAction() {
}
@Override
protected Boolean doInBackground() throws Exception {
executeThread = ExecuteWebServiceAction.webServiceExecution();
return executeThread;
}
@Override
protected void done() {
try {
boolean isOver = (boolean) get();
if (isOver) {
MainApplication.getInstance().getFrame().setStatus(LangUtil.getString("cdsExecuteFinehed")
+ " " + ((WebServiceTool) DrawingManager.getInstance().getCurrentTool()).getName());
FrameMain.jPanel6.repaint();
}
} catch (Interr`enter code here`uptedException ex) {
Logger.getLogger(TestAction.class.getName()).log(Level.SEVERE, null, ex);
} catch (ExecutionException ex) {
Logger.getLogger(TestAction.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
И вот здесь я вызываю TestAction:
if (!WorkFlow.isIsWorkflow()) {
SwingUtilities.invokeLater(
new Runnable() {
@Override
public void run() {
webServiceExecution();
}
});
} else {
new TestAction().execute();
}
getProgress()
, который поможет вам отслеживать ход выполнения задачи (не уверен, что вам это нужно). - person assylias   schedule 14.03.2012