我正在尝试创建一个具有切换按钮(常规JButton)的程序,在单击时,运行一个while循环,直到再次单击该按钮以停止它。
我已经这样做了,但是,当我点击按钮时,整个JFrame因为它被卡在while循环中而冻结,因为循环将永远运行直到再次按下该按钮。但是,由于JFrame冻结,因此无法再次单击该按钮。按钮本身也只是保持蓝色,因为JFrame在颜色发生变化之前会冻结;就在我点击按钮之前。
我的代码看起来像这样:
boolean isRunning=false;
private void buttonClickEvent(ActionEvent evt) {
if(isRunning){
isRunning=false;
System.out.println("Stopped running!");
jButton.setText("Start Running");
} else { // BELOW IS THE CODE THAT CAUSES IT TO LOCK
isRunning=true;
jButton.setText("Stop Routine");
while(isRunning){
// DO STUFF
}
}
}
编辑:我尝试执行以下代码(下面),它会打印文本并允许在按钮中进行颜色更改,但之后UI仍然会快速冻结。
boolean isRunning=false;
private void buttonClickEvent(ActionEvent evt) {
if(isRunning){
isRunning=false;
System.out.println("Stopped running!");
jButton.setText("Start Running");
} else { // BELOW IS THE CODE THAT CAUSES IT TO LOCK
isRunning=true;
jButton.setText("Stop Routine");
new Thread(new Runnable() {
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
while(isInRoutine){
System.out.println("lolk");
}
}
});
}
}).start();
}
}