java中的System.exit(0)

Ram*_*Ram 10 java swing

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

Ste*_*n C 11

通常,System.exit(...)除了应用程序的"主要"方法之外的任何地方调用可能是(至少)以下原因的问题.

  • 重用代码是一个障碍.

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

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

但是,我想我仍然试图让退出以不同的方式发生.例如,让main方法启动所有内容然后在CountDownLatch上阻塞,然后让按钮侦听器减少锁存器.当main方法解除阻塞时,它会执行相关的关闭代码并根据需要返回或退出.


Rid*_*del 6

Personnaly,我确实认为让应用程序自行退出是最好的做法:如果你用一个main(String[] args)带有空代码的a编写一个主类,那么运行它将从Java程序中静默退出.

但是,在大多数情况下,像大多数开发人员一样,我依赖,特别是对于Swing应用程序,其中Swing EDT将无休止地运行,正如justkt写的那样.这种方法的已知drawxback是大多数应用程序代码没有被调用,什么我通过调用设置关闭钩子来避免,这将允许我清理应用程序(关闭线程,等等).System.exit(/an exit code/)Runtime.addShutdownHook(Thread)