目前我有一个实时活动的while循环运行,它可以实现我想要的唯一问题是关闭框架(退出应用程序),而while循环仍处于活动状态。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
我尝试使用if语句来终止循环
if (frame.getDefaultCloseOperation() == 3){
running = false;
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
不幸的是,只要应用程序自动运行,就会立即设置为3
,并且此过程无法正常运行。
如何通过单击要关闭的帧来设置running = false;
。
我想通过点击connour中的X来关闭应用程序,是否可以在运行活动循环时使用?
答案 0 :(得分:2)
有几种方法可以达到你想要的效果。
在daemon thread中运行循环。这样的线程不会阻止应用程序停止。只需be careful when you call swing code from such a thread。
此问题解释了当用户尝试关闭窗口时如何显示确认对话框:Java - Message when closing JFrame Window
而不是对话框,只需将running = false;
放在那里。
注意:如果在Swing线程中运行循环,则Swing无法响应该事件。在这种情况下使用解决方案#1。
答案 1 :(得分:1)
只需在声明中设置frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
即可自动关闭循环
答案 2 :(得分:0)
您正在设置默认关闭操作。 但是在你的代码中这个
if (frame.getDefaultCloseOperation() == 3){
仅检查关闭操作是否仍设置为JFrame.EXIT_ON_CLOSE
你想要的是回应关闭事件。 我怀疑你需要this answer
设置帧时,将一些代码添加到初始化块
addWindowListener(this);
然后在同一个类中实现onclosing窗口监听器:
public void windowClosing(WindowEvent event) {
running = false;
}
答案 3 :(得分:0)
删除frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
,添加Windows侦听器并手动关闭应用程序。
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
running = false;
}
@Override
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});