Java-开始一个循环,然后继续?
我目前正在用Java编程。当用户按下程序的开始按钮时,我想要一个循环开始。但是,我希望用户能够使用停止按钮停止循环:Java-开始一个循环,然后继续?,java,loops,actionlistener,Java,Loops,Actionlistener,我目前正在用Java编程。当用户按下程序的开始按钮时,我想要一个循环开始。但是,我希望用户能够使用停止按钮停止循环: public class Program { private boolean active; // MVC stuff... private class StartListener implements ActionListener { public void actionPerformed(ActionEvent e) {
public class Program {
private boolean active;
// MVC stuff...
private class StartListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// Do stuff...
active = true;
hotelCalifornia();
}
}
private class StopListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// Do stuff...
active = false;
}
}
public void hotelCalifornia() {
while (this.active) {
// The program never leaves!
}
}
}
但一旦循环启动,程序只执行循环的操作。有办法解决这个问题吗?有没有更好的方法来实现我的目标
谢谢 首先,您必须在新的
线程中启动循环
然后,当用户按下stop()
,调用thread.interrupt()
在循环内添加:
if (Thread.currentThread().isInterrupted()) {
break;
}
Java Swing应用程序中的所有事件都在单个事件线程中调用
您应该创建一个函数,以便在如此频繁的情况下调用所需的任何方法 我建议将逻辑放在可运行的while循环中
class basicThread implements Runnable {
public void run() {
while (true) {
// Put the stuff in your while loop here
}
}
}
设置一个线程来执行您的runnable
// Create a thread to execute your runnable
Thread thread = new Thread(new basicThread());
然后打电话给下面的StartListener
thread.start();
下面是StopListener
thread.interrupt()
<>有两件事要考虑。
首先,您正在事件分派线程中创建一个长时间运行的进程。这是你永远不应该做的事情。正如Nican指出的,Swing应用程序中的所有GUI事件都将在此线程中调用。当用户按下开始按钮时,您的StartListener
中执行的操作将在EDT中调用。有关Swing线程的更多信息,请阅读
这引出了第二点:您将希望在不同的线程中运行您的hotelCalifornia
。您可以保留对这个线程的引用,这样您就可以调用thread.interrupt()
,正如Bozho指出的那样。您还可以选择使用自己的实现,但您需要确保将活动变量声明为,以便布尔值的状态在更新后立即可供新线程访问。一个选项是使用。
当您不再希望它运行时,对其调用cancel()方法,并在循环中检查isCancelled()