dispose()与setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)的区别。

3
我一直在搜索关于这个主题的信息,但从来没有得到任何满意的答案,所以最终在这里提出了问题 :). 无论如何,从这个类似的post中可以清楚地看出,dispose()并不终止所有进程,即使在关闭JFrame之后,在任务管理器中仍然有残留( AWT进程没有完全终止)。

所以我的问题是:

  1. this.dispose()会在处理JFrame后清除每个子进程吗?还是setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);代替完成此工作。
  2. 如果我正在为低端PC开发应用程序,哪一个在性能方面更好?

谢谢,对此的任何建议都将不胜感激。


我建议使用 DISPOSE_ON_CLOSE 而不是 EXIT_ON_CLOSE - user2575725
我不会太担心性能影响,毕竟,你期望用户每秒退出你的应用程序多少次呢? :) - biziclop
确实如此。@biziclop。但仍然想了解两个组件的规格。谢谢。 - mustangDC
1个回答

4

回答第一个问题:

dispose() 方法用于销毁窗口并让操作系统清理它,如果它是应用程序中唯一的 JFrame,那么Java虚拟机可能会终止。所以,总结一下,它将关闭窗口,如果该JFrame 是你的应用程序中唯一剩余的窗口,则可能(或可能不会)终止你的VM。

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)则会在关闭JFrame 时调用System.exit()方法,无论应用程序中是否有其他活动的JFrames,都会终止VM。

所以,它们是两个不同的东西 :-)

回答你的第二个问题,你可以测试一下。但是老实说,我不太担心这个。


1
这可能不是什么大问题,就像你和@biziclop所说的那样,但它是否也会关闭与数据库和其他资源的连接? - mustangDC
2
@mustangDC 不会的。DISPOSE_ON_CLOSE 只会处理窗口和显示它所需的本地资源。(这通常是好的,想象一下你希望程序在后台运行,并在任务托盘中显示一个小图标的情况。) - biziclop
1
这是一个很好的想法,@biziclop针对这种需求提出了一个应用程序。干杯! - mustangDC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接