Erstellen Sie einen Swing-Thread, der einen "Please Wait" -JDialog anzeigt

Das Problem ist folgendes:
Ich habe eine Swing-Anwendung ausgeführt, an einem bestimmten Punkt muss ein Dialogfeld Benutzername und Passwort eingeben und "OK" drücken.
Ich möchte, dass, wenn der Benutzer "OK" drückt, die Swing-Anwendung in dieser Reihenfolge ausgeführt wird:

Öffnen Sie einen JDialog "Bitte warten"
Führen Sie eine Operation durch (eventuell Anzeigen eines anderen JDialogs oder JOptionPanes)
Wenn der Vorgang abgeschlossen ist, schließen Sie den JDialog "Bitte warten"

Dies ist der Code, den ich in okButtonActionPerformed () geschrieben habe:

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()
}

Dieser Code funktioniert offensichtlich nicht, da beim Aufrufen von waitDialog im selben Thread alle blockiert werden, bis ich ihn nicht mehr schließe.
Also habe ich versucht, es in einem anderen Thread auszuführen:

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()
}

Aber auch das funktioniert nicht, weil der waitDialog nicht sofort angezeigt wird, sondern erst dann, wenn die Operation ihre Arbeit beendet hat (wenn ein Fenster mit der Option "Sie sind angemeldet als ..." angezeigt wird).

Ich habe auch versucht, invokeAndWait anstelle von invokeLater zu verwenden, aber in diesem Fall wird eine Ausnahme ausgelöst:

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

Wie kann ich?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage