我有一个 SwingWorker,它在后台读取和处理文件,然后在 JTextPane 中格式化和显示具有各种样式的数据。
如果文件很大(超过 200K),我将显示一个带有进度条的对话框。在 SwingWorker 的 done() 方法中,我填充了 JTextPane,然后隐藏了对话框。done() 方法如下所示:
protected void done() {
populateTextPane();
hideProgressDialog();
System.out.println("After hideProgressDialog");
}
当它运行时,我会看到对话框消失并且控制台上的 println 消息,但随后 GUI 再冻结 10-15 秒,在冻结结束时数据在 JTextPane 中变得可见。
我认为 done() 方法中发生的任何事情都会发生在事件调度线程中。但显然 JVM 正在生成另一个线程来隐藏对话框并在填充 JTextPane 时执行 println。我想保持显示进度对话框,直到 GUI 准备好再次接受用户输入......我如何检测 done() 中的所有内容何时真正完成?