これで困惑しましたが、おそらく誰かが以前にこの問題を抱えていて、正しい方向に向けることができます。トラブルシューティング:モーダルでモーダルではないJDialog?
私は明示的に定義所有者とモーダルとして作成した長時間実行中のタスクの進行状況、表示するために使って、JDialogを持っている:タスクが完了すると、後で
progressDialog = new JDialog(((Dialog)windowParent), true);
...
progressDialog.setVisible(true);
を、私は閉じます再びダイアログ:非常にまれな状況下
protected void done() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progressDialog.setVisible(false);
}
});
}
は、ダイアログa)は閉じないと、ユーザーは(理論値)のダイアログの背後にある窓と相互作用することができる。すなわちb)に、真のモーダルではありません。これを引き起こしている可能性のあるアイデアは何ですか?残念なことに、これは非常にまれであり、今まではLinuxシステム上でしか起こりませんでした。これはスイングのバグでしょうか、おそらく何か間違っていますか?
ためSun Blogとそれに伴うJavadocあなたが本当にのためにinvokeLaterが必要ですあなたを隠している? GUIを介して呼び出された可能性が最も高いので、すでにEDT上にあると推測しています。 – willcodejavaforfood
可視性の設定はGUI操作であるため、EDT以外のスレッドからdone()が呼び出されるとすぐにinvokeLater()を呼び出す必要があります。これは安全なことです。 EDTに電話をしても傷つくことはありません。 –