基于Swing的加载框架在数据库查询中挂起

时间:2014-01-14 12:38:38

标签: java swing jdbc loading event-dispatch-thread

我知道有很多类似的主题,但我不能将这些解决方案应用到我的项目中。

我有一个庞大的Java应用程序,其中有许多耗时的数据库操作。一切都在一个线程中实现,所以当程序查询数据库时,UI会挂起。我有一个任务是在描述的情况下制作一个加载窗口。我已经尝试了JWindow个对象,JFrame始终位于顶部,模态对话框,但它们都没有成功。

这是事情: 我的JDialog包含JPanel。该面板由2个输入字段(loginpassword)和登录按钮组成。当用户按下登录时,(顶部)应显示"Loading..."窗口。对话框是模态的,alwaysOnTop

我该怎么做?

我得到的最近的解决方案是:

JDialog modalDialog = new JDialog(dialog, "Busy", ModalityType.MODELESS);
modalDialog.add(new JLabel("Loading..."));
modalDialog.setSize(200, 150);
modalDialog.setLocationRelativeTo(dialog);
modalDialog.setVisible(true);

但是对话框并没有很好地展现出来:

它包含背景中的元素而不是Loading text...

加载完成后,根据需要显示Loading... text

当我添加

      modalDialog.setUndecorated(true);

它不会在第一个平面上绘制......我不想要一个带有[X]

的条形图

1 个答案:

答案 0 :(得分:2)

不要在Swing UI操作的同一个线程上放置耗时的操作。所有Swing UI操作都在“事件调度线程”上进行,您可以自行处理耗时的操作。

查看一个类的javax.swing.SwingWorker,它可以很容易地将耗时的操作放在另一个线程上。

查看一个javax.swing.JProgressBar,它允许您在耗时的操作过程中显示进度条。