关于java的setDefaultCloseOperation() 的位置问题

胧明 2020-01-17 01:26:00
自己摸索搞不懂,我把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);

但是放在前面的任何位置就可以。
我猜测是要在关闭窗口之前能读到这个语句,才能够执行,但是我查不到相关的内容
...全文
254 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2020-01-17
  • 打赏
  • 举报
回复
把isShowing方法改成同步方法,或者把isShowing内部的控制变量改为volatile
多线程时,isShowing没有同步的话,while (jf.isShowing())有可能一直取不到isShowing的最新情报(不能及时刷新主存信息),所以会死循环,而加上System.out.print("");,该方法是同步方法,线程一定程度上会刷新主存,所以能取到isShowing的最新情报,不会死循环
LZ可以多参考一些多线程共享变量的资料,或者了解一下volatile变量的作用
sunyiz 2020-01-17
  • 打赏
  • 举报
回复
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这是对窗体退出时默认行为的设置
正确的做法应该是在
jf.setVisible(true);
之前就先设置好
胧明 2020-01-17
  • 打赏
  • 举报
回复
上面删代码的时候,傻傻把一些分号删了
然后下面这种情况,就是while (jf.isShowing()) 里要有输出语句(无论输出什么),才会退出程序,如果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);
while (jf.isShowing())
System.out.print("");
if (!jf.isShowing()) {
System.exit(0);
}

51,399

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧