Выполнить Swing Worker в очереди - PullRequest
0 голосов
/ 06 мая 2019

Мне нужно импортировать пакет данных с помощью 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...
}
...