1
public class Simulation extends Thread {
    private volatile boolean loopState = true;

    public void stopLoop() {
        loopState = false;
    }

    public void run() {     
        try {
            Robot r = new Robot();

            while (loopState) {
                r.keyPress(KeyEvent.VK_LEFT);
                r.keyRelease(KeyEvent.VK_LEFT);
                sleep(50);
            }
        } catch (AWTException | InterruptedException e) {}
    }
}

stopLoop()以下のループを起動whileしても停止しません。呼び出しloopStateの最後にの値を出力すると、戻りますが、ループはまだ実行中です。stopLoop()false

このコードを使用してメソッドを呼び出します。

Simulation simulation = new Simulation();
    switch (PressedButtonID) {
        case 14:
            simulation.start();
            break;
        case 15:
            simulation.stopLoop();
            break;
}
4

1 に答える 1

0

次の単純なプログラムが示すように、投稿されたコードは完全に機能します。ご覧のとおり、while ループは期待どおりに停止します。問題は別の場所にあります。

import java.awt.*;
import java.awt.event.KeyEvent;

public class Simulation extends Thread {
    private volatile boolean loopState = true;

    public void stopLoop() {
        loopState = false;
    }

    public void run() {
        try {
            Robot r = new Robot();

            while (loopState) {
                r.keyPress(KeyEvent.VK_LEFT);
                r.keyRelease(KeyEvent.VK_LEFT);
                System.out.println("Simulation loop: CALLED");
                sleep(50);
            }
        } catch (AWTException | InterruptedException e) {}
    }

    public static void main(String[] args) throws InterruptedException {
        Simulation simulation = new Simulation();
        simulation.start();
        Thread.sleep(1000);
        simulation.stopLoop();
    }
}
于 2013-01-20T22:05:36.720 に答える