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

2023-12-31

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

  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);
         }
       }            
});

无论我如何尝试,当我走出窗户时,窗户总是会关闭。将 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 调用的注释,并点击关闭按钮,窗口不会退出。取消注释并点击关闭按钮,窗口关闭。

我不得不猜测你设置“close”变量的逻辑有问题。尝试仔细检查一下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java - 如何防止 WindowClosing 实际关闭窗口 的相关文章

随机推荐