Остановить, закрыть, закончить, поток в Java в зависимости от условия - PullRequest
0 голосов
/ 06 июня 2018

Я не уверен, как заставить это работать.Я хочу, чтобы этот протектор остановился один раз (startNumber == 0 || !Player.cCounting).!Player.cCounting - это boolean, к которому осуществляется доступ.Если какое-либо условие выполнено, я хочу остановить цикл.

public class Console {

    static long lastTime;
    static boolean cCounting = true;
    static long seconds = 0;
    static long delta = 0;
    static int startNumber = (int) Level.cookieTime / 1000;
    Thread countDown;

    public Console() {

        cookieCountDown();
        lastTime = System.currentTimeMillis();
    }

    public void cookieCountDown() {
        countDown = new Thread(new Runnable() {
            @Override
            public void run() {
                startNumber = (int) Level.cookieTime / 1000;
                while (startNumber != 0) {

                    cCounting = Game.enter;
                    //System.out.println(cCounting);
                    try {
                        Thread.sleep(0);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    while (startNumber > 0 && cCounting) {
                        long now = System.currentTimeMillis();
                        delta = now - lastTime;

                        if (delta >= 1000) {
                            delta = 0;
                            lastTime = System.currentTimeMillis();
                            System.out.println("cookie " + startNumber);// print countdown;
                            startNumber--;
                            System.out.println(Player.cCounting);
                            if (Player.cCounting = false) {
                                end();
                            }
                        }
                    }
                }
            }
        });
        countDown.start();
    }

    public void end() {
        System.out.println(startNumber);
        System.out.println(cCounting);
        if (startNumber == 0 || !Player.cCounting) {
            System.out.println("stop");
            //countDown.interrupt();
            //countDown.stop();
        }
    }
}

1 Ответ

0 голосов
/ 06 июня 2018

Вам просто нужно выйти из цикла.Замените ваш end(); вызов метода на return;.и сделать startNumber и Player.cCounting volatile например volatile static int startNumber

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...