Java 用按钮停止for循环

Java 用按钮停止for循环,java,multithreading,button,Java,Multithreading,Button,我试图停止通过按下按钮启动的for循环。我发现的唯一问题是,一旦按下启动按钮,应用程序实际上就没有响应。我该怎么做停车按钮呢?目前,我在IDE之外停止应用程序的唯一方法是进入TaskManager并强制删除它 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { String L = "Hello"; int Num = Integer.parseInt(m1.getText()); int Num2

我试图停止通过按下按钮启动的
for
循环。我发现的唯一问题是,一旦按下启动按钮,应用程序实际上就没有响应。我该怎么做停车按钮呢?目前,我在IDE之外停止应用程序的唯一方法是进入TaskManager并强制删除它

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {    
String L = "Hello";
int Num = Integer.parseInt(m1.getText());
int Num2 = Integer.parseInt(m2.getText());
nu = Num;  
for (int kk = nu; nu > 0; nu--) {
    if (O1.isSelected()) {
        for (int num3 = nu; nu > 0; nu--) {
            try {
                try {
                    Thread.sleep(Num2 * 1000);
                } catch (InterruptedException ex) {}
                Robot robot = new Robot();
                robot.keyPress(KeyEvent.VK_F);
            } catch (AWTException e) {
                e.printStackTrace();
            }
        }                                        
    }
}

这是我的代码,我一直在寻找,我认为我需要使用SwingWorker类。我不知道如何实现它。

您是否将循环放在按钮操作处理程序中


如果是这样,请将其拆下并放入螺纹中。否则它将阻止EDT,应用程序将变得无响应。仅使用按钮触发启动和停止。

如果没有代码,很难确定,但您可能正在AWT线程上执行循环,因此您的UI被阻止,无法按下按钮


您应该将无限循环移动到另一个线程,然后按钮将工作

您将以任何方式进入无限循环。我建议您将循环放在一个单独的线程中,当您想停止循环时,只需单击按钮中断该线程。

将代码移动到一个专用线程中,并使用变量检查从外部结束循环。

第一个问题是,您正在事件分派线程(EDT)内执行此循环。这是一个专门处理用户界面的线程。由于您正在该线程中循环和休眠,因此无法处理任何其他用户交互。因此,实际上你把自己锁在了自己的程序之外

关闭此循环的正确方法是在循环上创建一个
shutdown()
方法,该方法将修改循环每次迭代中检查的变量。然后,当您想关闭它时,只需在
Runnable
上调用此方法,循环就会关闭

public class KeyPressRunnable implements Runnable {
    private boolean isRunning = true;

    public void shutdown() {
        this.isRunning = false;
    }

    @Override
    public void run() {
        // put your loop in here, and include this code in the loop:
        if (!this.isRunning) break;
    }
}

请熟悉Java命名约定。局部变量不应以大写字母开头定义。