Java 当我在ActionListener中使用while时,它就停止了
当我点击Java 当我在ActionListener中使用while时,它就停止了,java,swing,jbutton,actionlistener,Java,Swing,Jbutton,Actionlistener,当我点击startbtn按钮时,整个程序刚刚停止,我无法处理任何事情 怎么了?问题是,当您将变量isRun设置为true时,程序进入而不退出循环。这发生在GUI正在运行的同一线程中,因此它变得不负责任,并且无法处理任何其他事件(如单击以通过将isRun设置为false停止运行操作) 因此,解决方案是在另一个线程中运行,同时运行循环任务,让GUI运行的线程可以自由处理更多事件 要在另一个线程中运行任务,我建议您使用并发框架中的任何类,例如 更进一步说,如果您的目的是提交可能被取消的任务,您甚至可以
startbtn
按钮时,整个程序刚刚停止,我无法处理任何事情
怎么了?问题是,当您将变量
isRun
设置为true
时,程序进入而不退出循环。这发生在GUI正在运行的同一线程中,因此它变得不负责任,并且无法处理任何其他事件(如单击以通过将isRun
设置为false
停止运行操作)
因此,解决方案是在另一个线程中运行,同时运行循环任务,让GUI运行的线程可以自由处理更多事件
要在另一个线程中运行任务,我建议您使用并发框架中的任何类,例如
更进一步说,如果您的目的是提交可能被取消的任务,您甚至可以使用
另外,请记住,使用一些同步机制来确保两个线程都能看到分配给isRun
的最新值,如果runProgram()
方法中没有堆栈跟踪,请将异常堆栈跟踪添加到问题中。不要阻止EDT(事件调度线程)。发生这种情况时,GUI将“冻结”。有关详细信息和修复方法,请参阅。
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;
}
});