【问题标题】:How to prevent multiple dialogs to appear at the same time?如何防止多个对话框同时出现?
【发布时间】:2009-04-30 07:14:11
【问题描述】:

当屏幕上已经有一个对话框时,如何避免显示一个对话框?

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

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

【问题讨论】:

    标签: java multithreading swing modal-dialog


    【解决方案1】:

    将对话框变成观察者并将错误事件发布到这个新观察者(参见Observer Design Pattern)。当事件发生时,对话框应该显示自己(以主框架作为父框架)。在对话框的表格中显示最近的错误。将新错误添加到该表的底部。

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

    【讨论】:

      【解决方案2】:

      另一种选择是将对话框变成单例:

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

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

      然后每次你需要显示对话框时,你只需引用单例:

      MyDialog.getInstance().showDialog();

      其中 showDialog 只是让对话框窗口可见。

      【讨论】:

        猜你喜欢
        • 2011-03-16
        • 2013-04-17
        • 2013-07-29
        • 1970-01-01
        • 2021-06-17
        • 2022-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多