Java - 如何防止 WindowClosing 实际关闭窗口

标签 java swing jframe windowlistener

对大多数人来说,我似乎有相反的问题。我有以下非常标准的代码来查看用户是否想在关闭窗口之前进行一些保存:

  frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
  frame.addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent ev) {
      boolean close = true;
         // check some files, asking if the user wants to save
         // YES and NO handle OK, but if the user hits Cancel on any file,
         //   I want to abort the close process     
         // So if any of them hit Cancel, I set "close" to false
      if (close) {
          frame.dispose();
          System.exit(0);
         }
       }            
});

无论我尝试什么,当我退出 windowClosing 时,窗口总是关闭。将 WindowAdapter 更改为 WindowListener 没有任何区别。奇怪的是文档明确指出“如果程序在处理此事件时没有明确隐藏或处置窗口,则窗口关闭操作将被取消”,但它对我来说不起作用。还有其他方法可以处理框架上的 x 吗? TIA

最佳答案

我刚刚尝试了这个最小的测试用例:

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Test {

    public static void main(String[] args) {
        final JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent ev) {
                //frame.dispose();
            }
        });
        frame.setVisible(true);
    }

}

如果我保留 dispose 调用的注释并点击关闭按钮,则窗口不会退出。取消注释并点击关闭按钮,窗口关闭。

我不得不猜测您设置“关闭”变量的逻辑有问题。尝试仔细检查。

关于Java - 如何防止 WindowClosing 实际关闭窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7613577/

相关文章:

java - Spring AMQP - 发布者确认不关闭未使用的 channel

java - 运行应用程序时框架出现空白(JAVA)

java - 如何使用 Java Swing 定时器在每次触发时做不同的事情?

java - 基本 JFrame 计算器

java - onClickListener 导致应用程序崩溃

java - Lambda 将 List 转换为共享值映射到唯一值列表

java - 在 Windows 7 64 位中设置 JMF

java - 如何使用 for 循环从 char 数组中绘制 Sprite

java - 如何让一个按钮打开一个新窗口并关闭旧窗口

java - RHEL : JDK 7u15 installation error