求助关于java的setDefaultCloseOperation() 的位置问题!

自己摸索搞不懂,我把setDefaultCloseOperation() 放在 while(jf.isShowing()) 之后就不会执行

 int x = 700

        int y = 300

        int width = 500

        int height = 500

        JFrame jf = new JFrame("测试");

        jf.setBounds(x, y, width, height); // 窗口的横竖位置和横竖长度

        jf.setVisible(true);

//        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        while(jf.isShowing()) ;

        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

但是放在前面的任何位置就可以。
我猜测是要在关闭窗口之前能读到这个语句,才能够执行
99LRC歌词,但是我查不到相关的内容

上面删代码的时候,傻傻把一些分号删了
然后下面这种情况,就是while (jf.isShowing()) 里要有输出语句(无论输出什么),才会退出程序,如果while (jf.isShowing())里内容是空的或者是非输出语句就不会退出程序,这是为什么

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这是对窗体退出时默认行为的设置
正确的做法应该是在 
jf.setVisible(true);
之前就先设置好

把isShowing方法改成同步方法,或者把isShowing内部的控制变量改为volatile
多线程时,isShowing没有同步的话,while (jf.isShowing())有可能一直取不到isShowing的最新情报(不能及时刷新 主存信息),所以会死循环,而加上System.out.print("");,该方法是同步方法,线程一定程度上会刷新主存,所以能取到 isShowing的最新情报,不会死循环
LZ可以多参考一些多线程共享变量的资料,或者了解一下volatile变量的作用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值