durch diese Stumped, aber vielleicht, nur vielleicht, jemand hat, bevor dieses Problem hatte und mich in die richtige Richtung zeigen kann.Fehlerbehebung: JDialog, der modal und doch nicht modal ist?
Ich habe einen JDialog zum Anzeigen des Fortschritts einer langlaufende Aufgabe, die ich ausdrücklich als modal mit einem definierten Eigentümer erstellt habe:
progressDialog = new JDialog(((Dialog)windowParent), true);
...
progressDialog.setVisible(true);
Später, sobald die Aufgabe abgeschlossen ist, schließe ich die Dialog wieder:
protected void done() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progressDialog.setVisible(false);
}
});
}
unter sehr seltenen Umständen funktioniert der Dialog a) nicht in der Nähe, und b) nicht wirklich modal, dh der Benutzer in der Lage ist, mit dem Fenster hinter dem (theoretischen) Dialog zu interagieren. Irgendwelche Ideen, was könnte das verursachen? Leider passiert es sehr selten und bis jetzt nur auf Linux-Systemen. Könnte das ein Swing Bug sein oder mache ich vielleicht etwas falsch?
Haben Sie wirklich brauchen die invokeLater für versteckt ut? Ich vermute, dass es bereits auf dem EDT wäre, da es höchstwahrscheinlich durch die GUI aufgerufen. – willcodejavaforfood
Da die Sichtbarkeitseinstellung ein GUI-Betrieb wird es in einer invokeLater() aufrufen, sobald fertig gestellt werden muss() ist aus einem nicht-EDT Thread aufgerufen. Das ist also eine sichere Sache. Wird nicht auch schaden, wenn sie auf dem EDT genannt. –