首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过代码关闭Java Swing应用程序

如何通过代码关闭Java Swing应用程序
EN

Stack Overflow用户
提问于 2008-11-03 08:01:54
回答 9查看 251.9K关注 0票数 98

从代码中终止Swing应用程序的正确方法是什么,陷阱是什么?

我试图在定时器触发后自动关闭我的应用程序。但是仅仅在JFrame上调用dispose()并没有起到作用--窗口消失了,但是应用程序并没有终止。但是,当使用close按钮关闭窗口时,应用程序确实会终止。我该怎么办?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2008-11-03 17:01:37

您的JFrame默认关闭操作可以设置为"DISPOSE_ON_CLOSE“,而不是EXIT_ON_CLOSE (我无法理解为什么人们一直使用EXIT_ON_CLOSE )。

如果有任何未释放的窗口或非守护进程线程,应用程序将不会终止。这应该被认为是一个错误(用System.exit解决它是一个非常糟糕的想法)。

最常见的罪魁祸首是java.util.Timer和您创建的自定义线程。两者都应设置为守护程序或必须显式终止。

如果要检查所有活动帧,可以使用Frame.getFrames()。如果所有Windows/Frame都已释放,则使用调试器检查是否有任何仍在运行的非守护进程线程。

票数 112
EN

Stack Overflow用户

发布于 2008-11-03 08:21:25

我猜是EXIT_ON_CLOSE

代码语言:javascript
运行
复制
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

System.exit(0)之前更好,因为你可以在实际离开应用程序之前编写一个Window Listener来进行一些清理操作。

该窗口侦听器允许您定义:

代码语言:javascript
运行
复制
public void windowClosing(WindowEvent e) {
    displayMessage("WindowListener method called: windowClosing.");
    //A pause so user can see the message before
    //the window actually closes.
    ActionListener task = new ActionListener() {
        boolean alreadyDisposed = false;
        public void actionPerformed(ActionEvent e) {
            if (frame.isDisplayable()) {
                alreadyDisposed = true;
                frame.dispose();
            }
        }
    };
    Timer timer = new Timer(500, task); //fire every half second
    timer.setInitialDelay(2000);        //first delay 2 seconds
    timer.setRepeats(false);
    timer.start();
}

public void windowClosed(WindowEvent e) {
    //This will only be seen on standard output.
    displayMessage("WindowListener method called: windowClosed.");
}
票数 37
EN

Stack Overflow用户

发布于 2008-11-03 08:04:32

尝试:

代码语言:javascript
运行
复制
System.exit(0);

很粗糙,但很有效。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/258099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档