Мне нужно импортировать пакет данных с помощью Swingworker, так как пользователь должен принимать решения во время процесса импорта с помощью графического интерфейса. Если у меня есть только одна партия данных для импорта, это не проблема, но если у меня несколько пакетов данных, мне нужно несколько Swingworker с потенциальным параллельным доступом к базе данных. Я пытаюсь выполнить импорт в цикле for, но они запускаются одновременно, что вызывает проблемы согласованности. Я хочу, чтобы следующий Swingworker был активирован только после завершения предыдущего. Я не могу (легко) переписать функцию, которая будет использоваться работником качания для создания синхронизации.
final JFileChooser fc;
if (view.LAST_FILES_POSITION == null) {
fc = new JFileChooser();
} else {
fc = new JFileChooser(new File(view.LAST_FILES_POSITION));
}
view.LAST_FILES_POSITION = fc.getSelectedFile().getParent();
File[] flows = fc.getSelectedFiles();
for(File flow: flows) {
((view)this).activateBusy("Importing Flow '" + flow.getName() + "' to database ...");
try {
ImportFlowTask tftask = new ImportFlowTask(this, flow);
tftask.execute();
((view)this).deactivateBusy();
} catch (DBInconsistencyException ex) {
ex.printStackTrace();
}
}
public class ImportTask extends SwingWorker<Object, Object>{
//Class does some job...
}