Сделайте свинг-нить, показывающую JDialog «Пожалуйста, подождите»
Проблема заключается в следующем:
У меня работает приложение Swing, в определенный момент диалоговое окно требует ввести имя пользователя и пароль и нажать «ОК».
Мне бы хотелось, чтобы, когда пользователь нажимал «ОК», приложение Swing делало это в следующем порядке:
Сделайте некоторую операцию (в конечном итоге отображая некоторые другие 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 отображается не сразу, а только после того, как операция завершила свою работу (когда они показывают панель перехода «Вы вошли как ...»)
Я также попытался использовать invokeAndWait вместо invokeLater, но в этом случае он выдает исключение:
Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread
Как я могу сделать?