我知道有很多类似的主题,但我不能将这些解决方案应用到我的项目中。
我有一个庞大的Java应用程序,其中有许多耗时的数据库操作。一切都在一个线程中实现,所以当程序查询数据库时,UI会挂起。我有一个任务是在描述的情况下制作一个加载窗口。我已经尝试了JWindow
个对象,JFrame
始终位于顶部,模态对话框,但它们都没有成功。
这是事情:
我的JDialog
包含JPanel
。该面板由2个输入字段(login
和password
)和登录按钮组成。当用户按下登录时,(顶部)应显示"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]
的条形图答案 0 :(得分:2)
不要在Swing UI操作的同一个线程上放置耗时的操作。所有Swing UI操作都在“事件调度线程”上进行,您可以自行处理耗时的操作。
查看一个类的javax.swing.SwingWorker,它可以很容易地将耗时的操作放在另一个线程上。
查看一个javax.swing.JProgressBar,它允许您在耗时的操作过程中显示进度条。