【发布时间】:2019-05-19 08:06:13
【问题描述】:
所以我正在尝试使用带有 MYSQL JDBC 连接的 Java Swing 表单制作一个购物车应用程序,在应用程序的一部分中,当用户单击“查看产品”之类的按钮时,机器需要一些时间来加载来自数据库的信息并在应用程序中输出,所以在那段时间我想显示一个加载图标,直到工作完成。为了实现这一点,我创建了一个单独的 JDialog 用于显示加载 gif,并从 JFrame 打开它在按钮的 ActionPerformed 事件上。这是我的工作:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JDialog dialog = new loader(this, true);
dialog.setLocationRelativeTo(this);
dialog.setVisible(true);
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dialog.dispose();
}
});
timer.setRepeats(false);
timer.start();
}
但是,正如 Stack Overflow 上其他 QA 所建议的那样,使用 Swing Timer 在 1 秒后关闭 JDialog 并没有按预期工作,所以有什么方法可以完成此任务,即在 a 后关闭 JDialog 窗口某段时间?
【问题讨论】:
-
我回答是为了解释您为什么观察到这种行为。但我不明白为什么你会在一秒钟后关闭对话框,而不是在数据加载并可以显示后关闭。
-
你说得对,因为我对此还很陌生,我想不出比这更好的解决方案,如果你也能告诉我如何实现这一点,那就太好了。
-
见docs.oracle.com/javase/8/docs/api/javax/swing/SwingWorker.html。将第一个示例中的
label.setText(get());替换为dialog.dispose(),您就有了解决方案。