制作一个显示“请稍候”JDialog 的摆动线程
2022-09-03 16:44:12
问题是这样的:
我有一个swing应用程序正在运行,在某个时刻,对话框需要插入用户名和密码,然后按“ok”。
我希望当用户按“ok”时,Swing应用程序按以下顺序执行:
- 打开“请稍候”JDialog
- 进行一些操作(最终显示其他一些JDialog或JOptionPane)
- 当它完成操作关闭“请稍候”JDialog
这是我在 okButtonActionPerformed() 中编写的代码:
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {
//This class simply extends a JDialog and contains an image and a jlabel (Please wait)
final WaitDialog waitDialog = new WaitDialog(new javax.swing.JFrame(), false);
waitDialog.setVisible(true);
... //Do some operation (eventually show other JDialogs or JOptionPanes)
waitDialog.dispose()
}
这段代码显然不起作用,因为当我在同一线程中调用waitDialog时,它会阻止所有内容,直到我没有关闭它。
所以我尝试在另一个线程中运行它:
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {
//This class simply extends a JDialog and contains an image and a jlabel (Please wait)
final WaitDialog waitDialog = new WaitDialog(new javax.swing.JFrame(), false);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
waitDialog.setVisible(true);
}
});
... //Do some operation (eventually show other JDialogs or JOptionPanes)
waitDialog.dispose()
}
但这也不起作用,因为waitDialog不会立即显示,而只会在操作完成其工作之后显示(当他们显示joption窗格“您已登录为...”时)
我还尝试使用 invokeAndWait 而不是 invokeLater,但在这种情况下,它会引发异常:
Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread
我该怎么办?