1

これに困惑しましたが、たぶん、誰かが以前にこの問題を抱えていて、私を正しい方向に向けることができるかもしれません。

実行時間の長いタスクの進行状況を表示するための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システムでのみ発生していました。これはSwingのバグでしょうか、それとも何か間違ったことをしている可能性がありますか?

4

1 に答える 1

1

あなたの問題に対する決定的な解決策を提供することはできませんが、Linux のモーダル ダイアログであらゆる種類の奇妙な動作を見てきました。その多くは、ウィンドウ マネージャーに依存しています。

私たちの POS システムでは、非常に最小限の「flwm」ウィンドウ マネージャーを使用することになりました。ただし、最新の Linux デスクトップにはお勧めしません。

モダリティ自体について: Java 6 を使用できる場合は、JDK6 モダリティの変更と機能強化を確認することをお勧めします: Sun ブログおよび付随する Dialog.ModalExclusionType のJavadoc

于 2009-04-16T22:09:51.660 に答える