如何在Event dispatch线程中同时运行两个组件?

时间:2011-05-03 13:10:58

标签: java swing event-dispatch-thread

我有一个JButton,当我点击它时,我从数据库加载一些数据+初始化一个有很多控件的JDialog +用加载的数据填充那些控件然后显示慢JDialog。这需要大约3到5秒才能最终显示JDialog,这会导致程序以错误的方式冻结。

我创建了一个带有来自SwingX的JXBusyLabel的小型JDialog,以便在加载和初始化此类缓慢进程时显示忙标签。但是,如何在初始化慢速对话框的同时在EDT中运行这个繁忙的标签JDialog?

注意:从db加载数据并不慢,但是初始化繁重的JDialog及其组件会导致处理速度变慢。

2 个答案:

答案 0 :(得分:5)

  1. 显示忙碌对话框。

  2. 启动SwingWorker并在后台执行所有长时间运行的任务(数据库)

  3. 完成后,使用数据库中的数据创建大对话框(在SwingWorker.done(方法)内)

  4. 隐藏繁忙的对话框,显示大对话框。

答案 1 :(得分:0)

您最好使用SwingWorker:

  1. 使用busy label创建对话框,创建swing worker
  2. 启动swingworker(它将异步加载来自DB的数据,为主对话框准备控制权)
  3. 在SwingWorker的done()方法中,隐藏你的第一个小对话框并显示主要对话框