subframe frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 和 system.exit( )区别

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 和 system.exit( )区别
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 和 system.exit( )区别
System.exit(0)是退出整个程式,如果有多个视窗,全部都销毁退出。
frame.setDefaultCloseOperation()是设定使用者在此窗体上发起 "close" 时预设执行的操作。必须指定以下选项之一:
DO_NOTHING_ON_CLOSE(在 WindowConstants 中定义):不执行任何操作;要求程式在已注册的 WindowListener 物件的 windowClosing 方法中处理该操作。
HIDE_ON_CLOSE(在 WindowConstants 中定义):呼叫任意已注册的 WindowListener 物件后自动隐藏该窗体。
DISPOSE_ON_CLOSE(在 WindowConstants 中定义):呼叫任意已注册 WindowListener 的物件后自动隐藏并释放该窗体。
EXIT_ON_CLOSE(在 JFrame 中定义):使用 System exit 方法退出应用程式。仅在应用程式中使用。
预设情况下,该值被设定为 HIDE_ON_CLOSE
也就是说没有设定的话,预设点关闭时只是隐藏窗体,在后台程序中还可以看到,如果有多个视窗,只是销毁呼叫dispose的视窗,其他视窗仍然存在,整个应用程式还是处于执行状态。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
退出应用程式 关闭视窗..
System.exit(0); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 前辈,现在视窗一闪就没了,不见程式
System.exit(0); 是退出程式,程式都结束了,其他的还有意义吗
再补充一下:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这句程式码的意思是:点选“关闭”按钮后退出程式,不会有提示
但是这个方法在JFrame里才有,有了这句程式码后就不用手动呼叫System.exit(0); 了(除非你希望程式非正常退出),也不需要再单独注册WindowsListener(WindowAdapter)来处理关闭事件,除非你需要额外的功能,比如,点选关闭后弹出视窗询问是否关闭等.
java中 fmd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);啥意思?
这是设定视窗的行为,是视窗在点选关闭按钮时直接退出。不作这个设定的话,点选关闭按钮只是使得视窗隐藏,而不退出
.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 起到什么作用
如果不加,点了之后只是视窗没了,不会退出程序,相当于frame.setVisible(false);你可以尝试不加,关闭视窗之后看任务管理,程序仍在。
我的myeclipse中怎么没有 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这个应该不会的。会不会你没有汇入javax.JFrame包。因为是这个包的东西,要先汇入。而且窗体要先继承自JFrame。然后才有这个属性。
java 用myeclipse编写窗体程式,系统找不到setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)这个类
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
这是个方法,不是一个类。这个方法在类 javax.swing.JFrame 中定义。
android system.exit 和finish的区别
当你在程式中呼叫 Activity.finish()方法时,结果和使用者按下 BACK 键一样:他告诉 Activity Manager该Activity例项可以被“回收”。随后 Activity Manager 启用处于栈第二层的 Activity 并重 新入栈,把原 Activity 压入到栈的第二层,从 Running ..
Process.killProcess 和System.exit的区别
1 Process.killProcess 和 System.exit(0) 两个都会 kill 掉当前程序。
你可以开启 DDMS 检视程序号,或 adb shell 进入 shell 然后 ps 一下,程序确实被 kill 掉了。
2 如果是在第一个 Activity 呼叫 Process.killProcess 或 System.exit(0) 都会 kill 掉当前程序。
但是如果不是在第一个 Activity 中呼叫,如 ActivityA 启动 ActivityB ,你在 ActivityB 中呼叫
Process.killProcess 或 System.exit(0) 当前程序确实也被 kill 掉了,但 app 会重新启动,
又建立了一个新的程序。(这是我同事发现的)
这点还不是很明白,我估计 android os 认为 app 是被意外终止的(如记忆体不足),os 底层有监听服务,
app 被意外终止会自动重启。
3 在测试极光推送的时候,发现退出 app 后就收不到推送了。后来发现是呼叫了 System.exit(0) 的原因。
首先 service 也是在程序中的,在主执行绪中,所以 service 中如果有耗时操作也要开启另外的执行绪来处理。
当呼叫 System.exit(0) 或 Process.killProcess 的时候程序被 kill 掉了,程序里的所有东西当然包括 service 肯定
也没了。由于极光推送 pushservice 被 kill 掉了,所以退出 app 后就收不到推送了。
4 还没完,戏剧性的事情发生了,刚退出 app 由于 kill 掉了程序,服务没了,所以收不到推送。但是过了大约1分钟左右居然又能推过来了。
原来是和 service 的 onStartCommand 的返回值有关
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("lelsie", "service onStartCommand");
return START_STICKY;
return START_NOT_STICKY;
}
如果返回 START_STICKY 是说服务应该一直执行除非我们手动停止它。极光 pushservice 返回的肯定是 START_STICKY。
所以1分钟之内系统又重启了服务,当然会先为 app 建立一个新的程序,也就是重启了 app, 同样你可以在 DDMM 中检视程序的杀死与新程序的重建。
我在手机上截了 2 张图
第一个图是在呼叫了 Process.killProcess 或 System.exit(0) 之后的图,可以看到程序已不存在了,服务当然也不在了。显示正在重新启动。
第二个图是服务重启以后的正常状态,所以 1-2分钟后又能接收到推送了。
第三个图是 DDMS 截图
5 其实 Process.killProcess 或 System.exit(0) 都不应该直接呼叫, 程序是由 os 底层进行管理的,android 系统会自己进行处理回收程序。
退出应用你就直接 finish 掉 activity 就行了。
正常情况下 back 键退出应用以后 os 就会回收 app 程序, 但当 app 中有推送服务等需要长时间执行的服务时 os 就不会 kill 掉程序,也就是说应用将一直线上。 即使你手动 kill 掉程序, 程序也会自动重启。
(Java)g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 这句话是预设视窗关闭的意思吗?
有了这句话,当点选关闭按钮时,这个视窗对应的后台程序也结束。
当然关闭视窗的方法很多,这是一种。