My SwingWorker doInBackground считывает несколько файлов Excel и выполняет длительные вычисления. У файлов есть имена и местоположения по умолчанию, но когда файл по умолчанию не найден, мне нужно открыть диалоговое окно «Открыть файл» и подождать, пока пользователь не выберет заменяющий файл.
Я попытался использовать publish(), и мой диалог Open .. выглядит красиво, но doInBackground продолжает выполнение и не ждет. Как я могу это сделать?java - Как вызвать JFileChooser изнутри SwingWorker doInBackground и ждать ответа?
private class DataTask extends SwingWorker<Void,Object>{
@Override
protected Void doInBackground() throws InterruptedException {
int progress = 0;
setProgress(0);
for (i = 1; i < 10; i++) {
processDescText = "read file "+i+"...";
try {
File f = new File(fileName[i]);
if(!f.exists()) {
// here I need to show open file dialog and wait for input
// ...
fileName[i] = userInput;
}
FileInputStream fis = new FileInputStream(fileName[i]);
XSSFWorkbook workbook = new XSSFWorkbook(fis);
fis.close();
setProgress(i);
// perform my calculations here
}
catch (IOException ex) {
}
}
return null;
}
}
Обычно вы используете 'SwingUtilities.invokeAndWait()'. Не уверен, имеет ли 'SwingWorker.doInBackground()' некоторое ограничение на использование этого метода. – vanza