【问题标题】:Default Close Operation of a JFrame isn't workingJFrame 的默认关闭操作不起作用
【发布时间】:2013-10-29 22:33:42
【问题描述】:

我正在使用 NetBeans。 我的JFrame 具有默认关闭操作:EXIT_ON_CLOSE。 我有一个按钮应该关闭这个JFrame 上的程序,这是执行代码的操作:

private void bSalirActionPerformed(java.awt.event.ActionEvent evt){                                       
    this.dispose();
}  

我以为这会关闭所有程序的JFrames,但它没有,你能解释一下为什么或如何解决它吗?

【问题讨论】:

  • 它有什么作用吗?它会关闭一帧吗?

标签: java swing jframe dispose


【解决方案1】:

假设你调用了你的 JFrame frame,像这样:

JFrame frame = new JFrame();

你可以通过调用来关闭它

frame.dispose();

此外,调用 this.dispose() 指的是您在类中定义的 dispose() 方法。这可能是它不起作用的原因。你的类中有一个叫做 dispose 的方法吗?如果是这样,这个方法究竟是做什么的?

【讨论】:

    【解决方案2】:

    EXIT_ON_CLOSE

    当您单击框架右上角的“X”按钮时会发生这种情况。

    您的 ActionListener 正在当前帧上调用 dispose()。如果这是唯一打开的框架,那么应用程序也会关闭,但 dispose 方法不会关闭所有打开的框架/对话框。

    查看Closing an Application。如果您想关闭整个应用程序,您可以使用ExitAction 作为您的按钮,因为它会模拟用户单击“X”按钮。

    【讨论】:

      【解决方案3】:

      构造框架时调用frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE)。在actionPerformed 方法中,调用frame.dispose() & 只要没有其他非守护线程在运行,JVM 就应该结束。

      DISPOSE_ON_CLOSE 可以在一个简短的演示中看到。在this answer

      ..我认为这会关闭所有 jFrames..

      应该只有一个(尽管上面的屏幕截图是人为的情况)。见The Use of Multiple JFrames, Good/Bad Practice?上述demo会在第3帧关闭后关闭。

      【讨论】:

      • setVisible 对我不起作用,但 dispose 对我有用......仍然很有趣
      • @MadProgrammer 在我写的时候我想知道setVisible 的正确性。老实说,我通常依赖X 按钮或F-4。现已编辑。
      • 同意,以前从未真正遇到过 OP 的问题
      • @MadProgrammer 好吧,如果发布了SSCCE(就像在链接的演示中一样),也许这个建议会更好,但我之前什至忘了提到它。 :P
      【解决方案4】:

      如果您想使用按钮退出应用程序,则可以使用System.exit()frame.dispose()

      但要小心System.exit(),因为这将终止JVM

      所以在此之前最好先得到用户的确认。 与JOptionPane.showConfirmDialog();

      private void bSalirActionPerformed(java.awt.event.ActionEvent evt){ 
      
              int exit = JOptionPane.showConfirmDialog(
                      frame,
                      "Are you sure you want to exit the application?",
                      "Exit Application",
                      JOptionPane.YES_NO_OPTION);                             
              if(JOptionPane.YES_OPTION == exit){
                   frame.dispose(); // or System.exit(1);
              }
          }
      

      【讨论】:

        【解决方案5】:

        我使用下面的方法,只要调用这个方法,它就会关闭当前窗口/jFrame:

          private void close(){
            WindowEvent windowEventClosing = new WindowEvent(this, WindowEvent.WINDOW_CLOSING);
            Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(windowEventClosing);     
        }
        

        根据您的需要,还可以在 properties 中为 jFrame 设置“defaultCloseOperation”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-14
          • 1970-01-01
          • 2013-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-29
          相关资源
          最近更新 更多