2009-03-16 9 views
1

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?

+0

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

+0

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. –

Antwort

1

Obwohl ich keine definitive Lösung für Ihr Problem finden kann, kann ich Ihnen sagen, dass ich alle Arten von seltsames Verhalten mit modalen Dialogen auf Linux gesehen habe - viele von ihnen abhängig von dem Window-Manager.

Für unsere Point of Sale-System haben wir die sehr minimalistisch „flwm“ Window-Manager mit endete, weil sie die zuverlässigsten und gewünschten Eigenschaften zur Verfügung gestellt. Ich würde es jedoch nicht für einen modernen Linux-Desktop empfehlen.

Was Modalität selbst: Wenn Sie 6 Java verwenden, können Sie vielleicht einen Blick in die JDK6 Modalität Änderungen und Erweiterungen haben wollen: Sun Blog und der begleitenden Javadoc für die Dialog.ModalExclusionType