自己摸索搞不懂,我把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变量的作用