Hab das schonmal verwendet, ohne Probleme. Dein Gui hängt nicht.
Du könntest auch die setVisible Methode überschreiben. Habs aber nicht getestet, ob das läuft, Hier mal aus dem Bauch heraus.
Es hängt nicht? Also das verstehe ich nicht. Ich meine, es ist grandios, dass das funktioniert, ich hätte sonst absolut nicht gewusst, wie ich so eine wartende Funktion im EDT machen kann.
Du rufst das aber auch aus dem EDT heraus auf, oder? Sprich, die Methode "EventQueue.isDispatchThread()" gibt true zurück?
Aber wieso stopp die Geschichte dann nicht. Wenn ich im EDT z.B. ne Schleife baue, die lange braucht um abzuarbeiten, dann steht die GUI ja auch, was ja auch logisch ist. Aber per .wait nicht? Achtet das Laufzeitsystem vielleicht explizit darauf, und macht in dem Fall tatsächlich einen neuen EDT im Hintergrund auf? Ich kann dazu aber in keiner Dokumentation etwas finden.
Also das Thema ist für mich gerade wirklich mysteriös
Edit:
Also ich habe es jetzt auch mal selbst ausprobiert, und es ist genau das Phänomen, was ich voraus gesagt habe. Leider reagiert die GUI dann nicht mehr. Also entweder, Du hast Dich irgendwie total vertan, oder ich mache etwas total falsch

Hier ist mein Test-Code, vielleicht hast Du ja Lust, den auch mal eben auszuprobieren:
Java:
public class ModalTest
{
@SuppressWarnings( "serial" )
class MyFrame extends JFrame
{
public void modalize()
{
final Object MODALLOCK = new Object();
addWindowListener( new WindowAdapter()
{
public void windowClosed( WindowEvent e )
{
synchronized ( MODALLOCK )
{
MODALLOCK.notifyAll();
}
}
} );
synchronized ( MODALLOCK )
{
try
{
MODALLOCK.wait();
}
catch ( InterruptedException ex ) { Thread.currentThread().interrupt(); }
}
}
}
public ModalTest()
{
JButton button = new JButton( "Fenster öffnen" );
button.setSize( 200, 80 );
button.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent arg0 )
{
System.out.println( EventQueue.isDispatchThread() );
MyFrame frame = new MyFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setSize( 400, 300 );
frame.setVisible( true );
frame.modalize();
}
});
JFrame frame = new MyFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setSize( 800, 600 );
frame.setLocationRelativeTo( null );
frame.setLayout( null );
frame.add( button );
frame.setVisible( true );
}
public static void main( String[] args )
{
new ModalTest();
}
}
Das Programm öffnet ein Fenster mit einem Button. Beim Klick auf den Button soll sich das neue, modale Fenster öffnen (ich rufe ja auch modalize() auf). Aber siehe, der Inhalt des neuen Fensters wird nicht mehr gezeichnet, und es kann nicht geschlossen werden, weil der Event-Dispatch-Thread (EDT) geblockt wird.
Siehst Du, was ich meine? Mach ich etwas falsch?