Сделайте свинг-нить, показывающую JDialog «Пожалуйста, подождите»

Проблема заключается в следующем:
У меня работает приложение Swing, в определенный момент диалоговое окно требует ввести имя пользователя и пароль и нажать «ОК».
Мне бы хотелось, чтобы, когда пользователь нажимал «ОК», приложение 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 отображается не сразу, а только после того, как операция завершила свою работу (когда они показывают панель перехода «Вы вошли как ...»)

Я также попытался использовать invokeAndWait вместо invokeLater, но в этом случае он выдает исключение:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread

Как я могу сделать?

Ответы на вопрос(2)

Ваш ответ на вопрос