如何防止多个对话框同时出现?

时间:2009-04-30 07:14:12

标签: java multithreading swing modal-dialog

如果屏幕上已有对话框,我该如何避免显示对话框?

详细信息:在我的应用程序中,许多计时器正在运行。如果发生致命错误,所有受影响的线程将显示JDialog(通过swingx.JXErrorPane.showDialog()),这是不希望的。即使我取消所有正在运行的计时器,仍会有一些对话框同时出现。我怎样才能实现只出现一个对话框?

我试图使调用showDialog()的方法同步,这导致我的整个GUI被阻止。使用标志也不起作用。

2 个答案:

答案 0 :(得分:6)

将对话框转换为观察者并将错误事件发布给此新观察者(请参阅Observer Design Pattern)。当事件发生时,对话框应显示自身(主框架为父框架)。在对话框中的表中显示最近的错误。将新错误添加到该表的底部。

另一种选择是在主框架中的表格中显示错误。将表放入JSplitPane,以便用户可以将其最小化。

答案 1 :(得分:0)

另一种选择是将对话框变为单身:

  • 为对话框提供私有构造函数。
  • 创建“私有静态MyDialog实例”; - 对话框类中的属性。
  • 创建一个“public static MyDialog getInstance(){...}; - 返回实例的方法,如果它为null,则首先实例化它。

MyDialog应该是对话窗口类的名称。

然后每当你需要显示对话框时,你只需要参考单身:

MyDialog.getInstance()的ShowDialog();

showDialog只是使对话窗口可见。