Swing:在长时间 运行 方法调用后更改为 JFrame 中的另一个面板
Swing: change to a another panel in a JFrame after a long running method call
我的 Java 应用程序工作流程:
- 获取输入关键字,然后将其转换为对 HTTP 的查询 POST
- 新建一个Jframe,显示一些字如"keyword processing... pls waiting."
- 执行 [1] 中的 POST,可能需要很多分钟。
- 得到POSTreturns个结果后,提取我需要的数据
- 显示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 更改面板。
我的 Java 应用程序工作流程:
- 获取输入关键字,然后将其转换为对 HTTP 的查询 POST
- 新建一个Jframe,显示一些字如"keyword processing... pls waiting."
- 执行 [1] 中的 POST,可能需要很多分钟。
- 得到POSTreturns个结果后,提取我需要的数据
- 显示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 更改面板。