Java 无法检测用户何时关闭(Xs)JFrame

Java 无法检测用户何时关闭(Xs)JFrame,java,swing,jframe,windowlistener,Java,Swing,Jframe,Windowlistener,版主:请参阅本答案的评论:stackoverflow.com/a/16388697/1574975 我试图检测用户何时使用带有GUI的客户端程序,以便当他们关闭JFrame(例如,通过使用它)时,我可以关闭套接字连接 但当用户关闭JFrame时,我无法使任何事情发生。我被告知我需要在JFrame中使用WindowListener,但它似乎不起作用。我的类扩展了JFrame,下面是设置JFrame的构造函数的一部分: this.setContentPane(pane);

版主:请参阅本答案的评论:stackoverflow.com/a/16388697/1574975

我试图检测用户何时使用带有GUI的客户端程序,以便当他们关闭JFrame(例如,通过使用它)时,我可以关闭套接字连接

但当用户关闭JFrame时,我无法使任何事情发生。我被告知我需要在JFrame中使用WindowListener,但它似乎不起作用。我的类扩展了JFrame,下面是设置JFrame的构造函数的一部分:

        this.setContentPane(pane);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.pack();
        this.setVisible(true);
        final JFrame thisFrame = this;
        thisFrame.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosed(WindowEvent e) {
                System.out.println("User has closed window");
            }
        });
    }

里面的println没有打印出来,这就是为什么我认为它不起作用的原因。我是做对了还是需要做些额外的事情

windowClosed
不会被调用,因为JVM已经关闭,以响应
setDefaultCloseOperation
被设置为
JFrame。在关闭时退出


改用
windowClosing
或更改
defaultCloseOperation

这个答案今天已经给了他。让人相信他为什么不遵循它。@Hoverfullofeels事实上,我认为是我的评论改变了被接受的答案,说了同样的话…:P@HovercraftFullOfEels,请阅读此答案的注释:@MadProgrammer,我起初不明白。但现在,它被解释得更详细了一点,我终于得到了它,它被修复了。非常感谢。我希望我的问题没有被否决。@hoverfullofeels有时,我们需要这些东西打到我们身上;)