Swing:在长时间 运行 方法调用后更改为 JFrame 中的另一个面板

Swing: change to a another panel in a JFrame after a long running method call

我的 Java 应用程序工作流程:

  1. 获取输入关键字,然后将其转换为对 HTTP 的查询 POST
  2. 新建一个Jframe,显示一些字如"keyword processing... pls waiting."
  3. 执行 [1] 中的 POST,可能需要很多分钟。
  4. 得到POSTreturns个结果后,提取我需要的数据
  5. 显示Jframe中的数据,替换[2]中的内容

我首先尝试在 Jframe 的构造函数中编写流程逻辑。 但是框架会挂在 HTTP POST 阶段,不显示 [2] 中的字样。 POST完成后,直接显示[5]中的数据。

因为跳出阶段[2],用户可能认为进程阻塞意味着有问题,它不做搜索工作。

现在我在阶段[2]中添加一个JOptionPane.showMessageDialog。它会停止该过程,因为需要用鼠标单击对话框中的 "OK" 按钮。 在那一刻,框架中的面板显示了 "keyword processing... pls waiting.".

字样

我想知道为什么MessageDialog的停止点可以画出旧的面板,也就是[2]中的话。 比如revalidate() or repaint() 不画旧面板

不要阻塞 EDT(事件调度线程)。当发生这种情况时,GUI 将 'freeze'。有关详细信息和修复(SwingWorker),请参阅 Concurrency in Swing


顺便说一句 - 使用 CardLayout as shown in this answer 更改面板。