【问题标题】:Close window - but don't stop program - JAVA关闭窗口 - 但不要停止程序 - JAVA
【发布时间】:2014-07-07 12:30:56
【问题描述】:

在我的程序中,如果发生操作,它会打开一个窗口。在我在这个窗口中填写了信息,并输入了一个按钮后,窗口 dispose()。

该窗口在我的主程序之外的程序中被拾取,但是当我关闭此窗口时,我的主程序停止。我怎样才能防止这种情况发生?

感谢您的帮助!

【问题讨论】:

    标签: java swing user-interface dispose


    【解决方案1】:
    1. 可以将第二帧的defalaultCloseOperation属性设置为DO_NOTHING_ON_CLOSEDISPOSE_ON_CLOSE

    2. 甚至不要使用两个框架。使用模态JDialog 代替辅助框架。在How to Use Dialogs 上查看更多信息。阅读有关Modality 的更多信息。如需阅读,请参阅The Use of Multiple JFrames, Good/Bad Practice?

    3. 忘记数字 1。直接进入 2。

    【讨论】:

      【解决方案2】:

      如果使用 JFrame 或对其进行扩展,您可以使用 setDefaultCloseOperation() 方法,例如:

      frame.setDefaultCloseOperation(HIDE_ON_CLOSE);
      // or
      frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
      

      【讨论】:

        【解决方案3】:

        dispose 命令来自 AWT 捆绑包,当您尝试使用 AWT 命令“关闭”摆动窗口时,这可能会导致问题。

        您可以使用以下命令关闭窗口:

        windowName.setVisable(false);
        

        windowName 是代表窗口的对象的名称。如果你正在扩展一个类,并且没有对象,你可以使用this

        有关处置方法的更多信息: “通常 java.awt.Window.dispose() 用于 GUI 组件,该组件是 Window 的子类,以用于特定的 GUI Window 对象(和 它的孩子)以正确释放和销毁本机 UI 资源(例如 作为屏幕)。垃圾收集(以及最终退出 整个 VM) 可能由于 dispose() 而发生,但不是直接发生 与 dispose() 调用本身连接。” 来自:https://www.java.net/node/684412

        【讨论】:

        • 但是在我通过按下关闭按钮 (X) 或窗口中的三个按钮之一关闭窗口后,我输入了命令 dispose()。我想处理窗口,但要继续主程序。
        • 为什么有必要这样做?
        • Java 的垃圾收集应该在轻量级 Swing 组件不使用后自动处理它们。
        • 因为程序的操作者输入数据后,窗口就不再需要了。
        • 所以一旦窗口关闭,让 Java VM 的自动引用计数(垃圾收集)负责管理处置是否有问题?
        【解决方案4】:
        windowName.setVisable(false);
        

        似乎不是一个好的选择。如果用户想退出程序怎么办?

        检查这个问题 - How to hide a JFrame in system tray of taskbar

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多