gpt4 book ai didi

java - 如何从 SwingWorker doInBackground 内部调用 JFileChooser 并等待答案?

转载 作者:行者123 更新时间:2023-12-02 04:26:28 25 4
gpt4 key购买 nike

我的 SwingWorker doInBackground 读取多个 Excel 文件并执行一些冗长的计算。这些文件具有默认名称和位置,但是当找不到默认文件时,我需要显示“打开文件”对话框并等待用户选择替换文件。
我尝试使用publish()并且我的Open..对话框显示得很好,但是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;
}

}

最佳答案

简短的回答是,不要。这会违反 Swing 的单线程规则。相反,预先收集文件的List,根据需要提示用户;一旦您获得了文件的List,只需将其传递给SwingWorker即可。

SwingWorker 应该只专注于处理文件,其他任何事情都应该生成异常。

关于java - 如何从 SwingWorker doInBackground 内部调用 JFileChooser 并等待答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32083588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com