Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的关闭窗口事件_Java_User Interface_Swing_Window - Fatal编程技术网

java中的关闭窗口事件

java中的关闭窗口事件,java,user-interface,swing,window,Java,User Interface,Swing,Window,我添加了一个窗口状态侦听器,如下所示: this.addWindowStateListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { ExitAction.getInstance().actionPerformed(null); } }); 但是,当我使用X关闭按钮时,不会调用该事件。 我认为这与netbean jdesktop框架有关。

我添加了一个窗口状态侦听器,如下所示:

this.addWindowStateListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            ExitAction.getInstance().actionPerformed(null);
        }

    });
但是,当我使用X关闭按钮时,不会调用该事件。 我认为这与netbean jdesktop框架有关。但我找不到问题所在。
谢谢你的帮助

通常使用WindowListener进行此操作


查看我使用的一种方法,尽管我必须承认我从未在Netbeans上尝试过,因为我没有使用IDE。

正如Java文档所说,要真正关闭窗口,侦听器应该调用窗口的dispose或setVisible(false)方法。

窗口关闭
窗口侦听器
界面的一部分。使用
addWindowListener
而不是
addWindowsStateListener

正如其他人指出的,WindowListener是您所追求的。。。但从现在起,在重写方法时应执行此操作:

this.addWindowStateListener(
    new WindowAdapter() 
    {
        @Overrides
        public void windowClosing(WindowEvent e) 
        {
            ExitAction.getInstance().actionPerformed(null);
        }

    });

然后,编译器会告诉您什么时候您实际上没有重写一个方法,而是添加了一个新方法(在这种情况下将永远不会被调用)。

没有直接回答您的问题(因为已经给出了答案),但我假设您想在退出时退出程序(或者只是隐藏一个窗口)。对于这些情况,有一个较短的解决方案:

window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

谢谢大家帮我解决这个问题。我并不完全理解它,但以下代码解决了这个问题:

    Frame[] frames = Frame.getFrames();
    for(Frame f: frames){
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                ExitAction.getInstance().actionPerformed(null);
            }

        });
    }
看起来框架好像添加了额外的框架。
谢谢,

刚刚在我的Swing程序中调试了一个类似的问题。事实证明,这是一个Java bug,当在创建Swing UI之前调用ImageIO时,它会杀死系统UI事件。请参见此处,了解一个最简单的示例-


此错误会阻止系统UI事件(如窗口关闭)传递到Java。

+1。请注意,
WindowsStateListener
用于处理窗口最小化或最大化时触发的事件等,但不能关闭。WindowAdapter既是WindowListener,也是WindowsStateListener。这里的问题是,它被添加为WindowsStateListener,因此它作为WindowListener的方法没有被调用。啊,是的,我不知道它实现了比WindowListener更多的功能。真奇怪。。。显然,他们在1.4中增加了这一点。在1.4之前,如果Java有注释,那么我所说的应该是有效的:-)(不删除答案,因为它作为一般规则是有效的,只是不适用于这种特定情况)