如何用按钮停止循环?

我正在编写一个程序,在单击开始按钮时启动循环,我想用停止按钮停止它。 问题是循环启动按钮在循环完成之前不起作用。 我已经搜索了类似的问题,并且理解问题是循环是在actionPerformed但我无法设法在actionPerformed之外采取循环。 我已经尝试过制作一个新的课程,并要求它等,但完全相同的事情发生了。 顺便说一句,我是Java的初学者,也是stackoverflow,如果我做错了,我很抱歉。
简单的代码:

OtherClass obj; public void actionPerformed(ActionEvent e) { if(e.getSource() == startButton) { while(true) { obj = new OtherClass(); obj.doJob(); } else if(e.getSource() == stopButton) { obj.stopLoop(); } } public class OtherClass { private boolean isStopped = false; public OtherClass() { } public void doJob(){ while(true) { //loop... if(isStopped) { break; } } } 

您需要在单独的线程(也称为“工作线程”)中运行doJob()。 按下按钮时启动线程,再次按下时,将isStopped标志设置为true。 注意不要在工作线程中执行UI操作(例如更新进度条) – 需要调用特殊方法来从工作线程更新UI。

由于这是一个非常普遍的问题(我的答案也很普遍),我建议在Google上查找“AWT ui thread”,“Worker thread”和“Java threading”。

一个很好的起点可能是课程:Swing中的并发

Perroloco解决方案没问题,但如果不使用普通的布尔值,你会使用AtomicBoolean会更好。 原因是,您将有两个线程修改/读取共享资源(工作线程和UI线程)

你应该使用一个线程。 如果在主线程中运行循环,则gui将被冻结,直到循环结束。

开始了:

 class yourClass{ ... private volatile boolean threadRunning = false; public void startThread(){ Thread t = new Thread(new Runnable(){ @Override public void run(){ threadRunning = true; while(threadRunning){ //do some job } } }); t.start(); } 

要停止循环,只需添加一个按钮并将threadRunning设置为false!