首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的System.exit(0)

java中的System.exit(0)
EN

Stack Overflow用户
提问于 2010-04-16 15:03:48
回答 5查看 6.3K关注 0票数 10

我正在使用swing编写一个应用程序。我需要通过单击以下JButton退出应用程序:是否可以使用System.exit()或是否应该使用其他方法,这是最佳实践。如果调用System.exit()不是最佳实践,那么说明原因并说明退出应用程序的替代方法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-16 15:09:33

就个人而言,我确实认为让应用程序自己退出是一种最佳实践:如果你用main(String[] args)编写一个主类,但没有代码,那么运行它将会从Java程序中静默退出。

但是,像大多数开发人员一样,在大多数情况下,我特别依赖System.exit(/an exit code/),,因为justkt写道,Swing EDT将在Swing应用程序中无休止地运行。这种方法已知的缺点是大多数应用程序代码不会被调用,我通过调用Runtime.addShutdownHook(Thread)来设置一个关闭钩子来避免这一点,这将允许我清理应用程序(关闭线程,等等)。

票数 6
EN

Stack Overflow用户

发布于 2010-04-16 15:43:14

通常,调用System.exit(...) anywhere但调用应用程序的"main“方法可能会有问题,原因(至少)如下。

  • 这是重用你的代码的一个障碍。
  • 它使得单元测试变得困难。例如,如果您的代码在JUnit测试执行一些错误处理时调用了System.exit,那么它就是您的测试序列的结尾!

在“退出”按钮的按钮侦听器中调用System.exit(...)的具体情况并不是那么糟糕。您不太可能希望在不需要此行为的地方重用按钮侦听器。此外,您可能会找到单元测试难题的变通方法;例如,不要对特定的方法进行单元测试!

然而,我认为我仍然会尝试以一种不同的方式退出。例如,让main方法启动所有内容,然后在CountDownLatch上阻塞,然后让按钮侦听器递减闩锁。当main方法解除阻塞时,它将执行相关的关闭代码,并根据需要返回或退出。

票数 11
EN

Stack Overflow用户

发布于 2010-04-16 15:22:29

如果您需要为应用程序设置退出代码,则必须使用System.exit (我认为)。

但是当您不需要特定的代码时(或者0也可以),我更愿意让JVM“自然”终止,这是在没有更多(非守护进程)线程时发生的。

通常,您只会到达main方法的末尾。

我会小心使用System.exit,因为可能还有其他线程需要做一些事情,没有正确关闭它们而退出可能会导致损坏。例如,嵌入式数据库可能仍然需要刷新其缓冲区。

如果您了解这些线程,通常可以安排它们优雅地结束。如果你不知道你的程序中有哪些线程在运行,你就有更大的问题了……

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

https://stackoverflow.com/questions/2651210

复制
相关文章

相似问题

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