Я разрабатываю свинговое приложение.В этом у меня есть рабочий процесс заданий, которые необходимо выполнить.
Я запускаю эти задания в цикле for один за другим.Интересно, что мне нужно обновить строку состояния графического интерфейса с текущим именем задания.
Я не могу использовать SwingUtilities.invokeAndWait, так как он не может работать в потоке диспетчеризации, который будет текущим запущенным потоком.
Я пытался использовать SwingWorker, так как задания выполняются в цикле, будет выполнен метод doBackGrount () SwingWorker, который выйдет и получит следующий индекс для запуска следующего задания.В done () SwingWorker я написал код для обновления GUI со статусом.
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();
}