使用按钮停止for循环

时间:2011-12-04 14:13:09

标签: java multithreading button

我正在尝试停止按下按钮启动的for循环。我发现的唯一问题是,一旦按下开始按钮,应用程序就完全没有响应。如何制作停止按钮?目前,我可以在IDE之外停止应用程序的唯一方法是进入任务管理器并强制删除它。

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类。我不知道如何实现它。

4 个答案:

答案 0 :(得分:0)

您是否已将循环置于按钮操作处理程序中?

若是,请将其移除并放入线程中。否则它将阻止EDT,应用程序将无法响应。仅使用按钮触发启动和停止。

答案 1 :(得分:0)

没有代码就很难确定,但你可能在AWT线程上执行循环,因此你的UI被阻止了,你不能按下按钮。

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

答案 2 :(得分:0)

无论如何进入无限循环。我建议将你的循环放在一个单独的线程中,当你想要停止它时,只需在按钮点击时中断该线程。

答案 3 :(得分:0)

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

第一个问题是你在Event Dispatch Thread(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;
    }
}