startbtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
isRun = true;
while(isRun)
runProgram();
}
});
stopbtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
isRun = false;
}
});
当我单击startbtn
按钮时,整个程序刚刚停止,我什么也无法处理。
怎么了?
问题是,当您将变量isRun
设置为true
时,程序进入while
循环而没有退出。这是在GUI正在运行的同一线程中发生的,因此它变得没有响应,并且无法处理任何其他事件(因为单击Stop运行操作)。
因此,解决方案是在另一个线程中运行while
循环任务,而让UI可以自由运行的线程处理更多事件。
要在另一个线程中运行任务,我建议您使用并发框架中的任何类,例如ExecutorService
甚至更进一步,如果您的目的是提交可能被取消的任务,您甚至可以使用ExecutorService
。