public class test {
public static void main(String[] args) {
frame tmp;
tmp=new frame();
ExecutorService executor;
executor=Executors.newCachedThreadPool();
executor.execute(tmp);
executor.shutdown();
}
}
public class frame extends JFrame implements Runnable{
int lis;
public frame()
{
setVisible(true);
lis=1;
addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent event)
{
lis=0;
}
}
);
}
@Override
public void run() {
while(lis==1)
{
}
JOptionPane.showMessageDialog(null,"close");
}
}
我认为在运行类测试后会发生的步骤序列
1)jframe显示并以单独的线程运行
2)关闭jframe后,线程完成执行并执行器关闭
3)类测试终止,因为所有语句都已执行。
但是当我运行班级考试时
关闭jframe类测试后没有终止
任何解释或参考都会有所帮助。谢谢
编辑:假设我创建了两个frame.i希望程序只在所有帧关闭后才退出,而不仅仅是一个jframe。
答案 0 :(得分:0)
您正在引用来自不同线程的lis
变量。根据Java Memory Model,它应该声明为volatile
。
答案 1 :(得分:0)
您需要设置默认关闭操作。在frame
构造函数中,添加:
setDefaultCloseOperation(EXIT_ON_CLOSE);