故障排除:JDialog是模态的,但不是模态的?

时间:2009-03-16 10:03:47

标签: java swing modal-dialog 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系统上发生。这可能是一个Swing bug还是我可能做错了什么?

1 个答案:

答案 0 :(得分:1)

即使我无法为您的问题提供明确的解决方案,我也可以告诉您,我已经在Linux上看到了各种奇怪的行为模式对话框 - 其中许多取决于Window管理器。

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

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