我正在使用swing编写一个应用程序。我需要通过单击以下JButton退出应用程序:是否可以使用System.exit()或是否应该使用其他方法,这是最佳实践。如果调用System.exit()不是最佳实践,那么说明原因并说明退出应用程序的替代方法。
发布于 2010-04-16 15:09:33
就个人而言,我确实认为让应用程序自己退出是一种最佳实践:如果你用main(String[] args)编写一个主类,但没有代码,那么运行它将会从Java程序中静默退出。
但是,像大多数开发人员一样,在大多数情况下,我特别依赖System.exit(/an exit code/),,因为justkt写道,Swing EDT将在Swing应用程序中无休止地运行。这种方法已知的缺点是大多数应用程序代码不会被调用,我通过调用Runtime.addShutdownHook(Thread)来设置一个关闭钩子来避免这一点,这将允许我清理应用程序(关闭线程,等等)。
发布于 2010-04-16 15:43:14
通常,调用System.exit(...) anywhere但调用应用程序的"main“方法可能会有问题,原因(至少)如下。
System.exit,那么它就是您的测试序列的结尾!在“退出”按钮的按钮侦听器中调用System.exit(...)的具体情况并不是那么糟糕。您不太可能希望在不需要此行为的地方重用按钮侦听器。此外,您可能会找到单元测试难题的变通方法;例如,不要对特定的方法进行单元测试!
然而,我认为我仍然会尝试以一种不同的方式退出。例如,让main方法启动所有内容,然后在CountDownLatch上阻塞,然后让按钮侦听器递减闩锁。当main方法解除阻塞时,它将执行相关的关闭代码,并根据需要返回或退出。
发布于 2010-04-16 15:22:29
如果您需要为应用程序设置退出代码,则必须使用System.exit (我认为)。
但是当您不需要特定的代码时(或者0也可以),我更愿意让JVM“自然”终止,这是在没有更多(非守护进程)线程时发生的。
通常,您只会到达main方法的末尾。
我会小心使用System.exit,因为可能还有其他线程需要做一些事情,没有正确关闭它们而退出可能会导致损坏。例如,嵌入式数据库可能仍然需要刷新其缓冲区。
如果您了解这些线程,通常可以安排它们优雅地结束。如果你不知道你的程序中有哪些线程在运行,你就有更大的问题了……
https://stackoverflow.com/questions/2651210
复制相似问题