我正在尝试停止按下按钮启动的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类。我不知道如何实现它。
答案 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;
}
}