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 上模态对话框的各种奇怪行为 - 其中许多取决于适当的窗口管理器。

对于我们的销售点系统,我们最终使用了非常简约的“flwm”窗口管理器,因为它提供了最可靠和最理想的属性。但是,不建议将它用于现代 Linux 桌面。

至于模态本身:如果您可以使用 Java 6,您可能希望查看 JDK6 模态更改和增强:Sun Blog和随附的 Dialog.ModalExclusionType的Javadoc

于 2009-04-16T22:09:51.660 回答