SwingUtilities.invokeLater und Modaler JDialog

Dit_

Bekanntes Mitglied
Hallo,

Dass man die Gui-Komponente in einem EDT starten/manipulieren soll, haben wir schon X-mal angesprochen... aber:
Java:
//modaler Dialog
InputJDialog dialog = new InputJDialog();
UserInput input = dialog.showAndGet();
if(input == null){
    return;//benutzer bricht die Eingabe ab.
}

//...

was macht man in dem Fall? :rtfm:

Danke schon mal!
 
Zuletzt bearbeitet:

Dit_

Bekanntes Mitglied
:eek:

Problem liegt wahrscheinlich darin, dass man sowas nicht machen kann:

Java:
                SwingUtilities.invokeLater(new Runnable() {
					
					@Override
					public void run() {
						//modaler Dialog
						InputJDialog dialog = new InputJDialog();
						UserInput input = dialog.showAndGet();
						if(input == null){
						    return;//benutzer bricht die Eingabe ab.
						}
						    //....
					}
				});

Modales Dialog Fenster:

die Methode
Code:
showAndGet()
gibt UserInput-Objekt zurueck, aber halt nur dann wenn
Code:
setVisible(false)
aufgerufen wird.

Code:
setVisible(false)
wird aufgerufen wenn der User seine Eingabe gemacht und auf OK geklickt hat.

Solange der User eine Eingabe macht, wird EDT blockiert :bahnhof:
 

Marco13

Top Contributor
Vielleicht geht es darum, dass der Dialog den EDT ""blockiert"", der EDT aber nicht wirklich "blockiert" werden soll? Bei einem modalen Dialog laufen im Hintergrund viele magische Dinge ab. Insbesondere wird FÜR den Dialog quasi ein neuer EDT gestartet, und nur der "alte" EDT wird blockiert. (Andernfalls könnte ja z.B. der Hintergrund nicht neu gezeichnet werden, wenn man den Dialog bewegt - genaugenommen könnte nichtmal der Dialog selbst gezeichnet werden :D )
 
G

GladstoneGander

Gast
JavaDoc lesen:

Dialog (Java Platform SE 7 b133))

Für die Faulen:

(...)
"It is OK to call this method from the event dispatching thread because the toolkit ensures that other events are not blocked while this method is blocked."

Hast du denn irgendein Problem in deiner Anwendung deswegen oder war das nur eine Frage der Frage wegen?
 

Dit_

Bekanntes Mitglied
Schön und gut aber ich muss doch etwas mit der Eingabe noch machen...

Java:
                UserInput input = null;
                SwingUtilities.invokeLater(new Runnable() {
                    
                    @Override
                    public void run() {
                        //modaler Dialog
                        InputJDialog dialog = new InputJDialog();
                        input = dialog.showAndGet();
                       
                            //....
                    }
                });

                if(input == null){
                        //KOMMT HALT HIER IMMER REIN...
                        return;
                } else {
                        auswerte(input);
                }

Oder soll ich die komplette funktionalität im EDT implementieren?
 

Marco13

Top Contributor
Dann solltest du, nachdem der Dialog zu ist, das Objekt abholen, aber das Abspeichern (was ja vermutlich aufwändiger sein kann) dann von einem eigenen Thread machen lassen. DAfür kannst du dann einen SwingWorker verwenden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ollek Swing SwingUtilities invokeLater und invokeAndWait AWT, Swing, JavaFX & SWT 4
W Swing SwingUtilities.invokeLater wie konsequent anwenden? AWT, Swing, JavaFX & SWT 3
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
G Frage zu SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 16
G Frage zu SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 9
B SwingUtilities.invokeLater() AWT, Swing, JavaFX & SWT 12
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
G LookAndFeel SwingUtilities.updateComponentTreeUI(frame) <- wie heißt mein Frame? AWT, Swing, JavaFX & SWT 5
J Alternative für SwingUtilities Schachteln AWT, Swing, JavaFX & SWT 2
G Vector ArrayIndexOutOfBoundsException SwingUtilities.invokeL AWT, Swing, JavaFX & SWT 5
M Swing GUI wird nach invokeLater() langsam AWT, Swing, JavaFX & SWT 19
B Frame hängt sich auf trotz invokeLater AWT, Swing, JavaFX & SWT 1
X Swing GUI-Änderungen mit invokeLater AWT, Swing, JavaFX & SWT 4
B Swing invokeLater nötig beim GUI erstellen? AWT, Swing, JavaFX & SWT 10
H invokeLater Problem AWT, Swing, JavaFX & SWT 8
I Swing Wann invokeLater() verwenden? AWT, Swing, JavaFX & SWT 7
E einfache Frage zu invokeLater() AWT, Swing, JavaFX & SWT 4
G Schachtelung bei invokeLater AWT, Swing, JavaFX & SWT 4
F invokeLater() vs synchronized(Object) AWT, Swing, JavaFX & SWT 5
T invokeLater - Wann? AWT, Swing, JavaFX & SWT 29
L invokeLater in der main-Methode AWT, Swing, JavaFX & SWT 6
D GUI in JFrame mit invokeLater verändern AWT, Swing, JavaFX & SWT 5
M GUI in Verbindung mit invokeLater() bzw. invokeAndWait() AWT, Swing, JavaFX & SWT 2
RalleYTN Modaler Dialog und JTree Node mit sehr... seeeeehr vielen Elementen AWT, Swing, JavaFX & SWT 6
hdi Swing Bzgl JFrame & modaler Dialog AWT, Swing, JavaFX & SWT 6
N Modaler Dialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 8
K Modaler Dialog aber trotzdem Aktualisierung des MainFrames AWT, Swing, JavaFX & SWT 6
P Swing modaler dialog AWT, Swing, JavaFX & SWT 3
P Blockierende Methode im EDT, modaler JDialog AWT, Swing, JavaFX & SWT 4
H nicht modaler Dialog verdeckt modalen Dialog AWT, Swing, JavaFX & SWT 5
loadbrain modaler JDialog AWT, Swing, JavaFX & SWT 4
F Modaler Dialog von außen schließen? AWT, Swing, JavaFX & SWT 3
lin modaler JDialog mit #dispose() schliessen ? AWT, Swing, JavaFX & SWT 4
thE_29 Modaler Dialog - close on not focus AWT, Swing, JavaFX & SWT 3
R modaler JDialog legt anwendungscode lahm AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben