Задача иногда остается "запертой" - PullRequest
0 голосов
/ 04 марта 2019

Я пишу приложение для управления звуком, в котором я использую много индикаторов, и один из них является индикатором «отсечения».
Как это должно работать, так это: если уровень звука превышаетlimit, метод с именем "setClipping" меняет цвет круга (в коде ниже он называется "clip"), чтобы превратить его из темно-красного в красный.Когда этот индикатор становится красным, он остается красным в течение 500 мс, а затем снова становится темно-красным.
Пока индикатор красный, если метод "setClipping" вызывается снова, задача отменяется;а затем создается и запускается новый.

Вот код метода:

public void setClipping(boolean clipping) {
// The Task "task" and Circle "clip" are declared earlier in my class

    if (clipping) {
        Platform.runLater(() -> {
            if (task!=null && task.isRunning()) {
                task.cancel();
            }
        });
        task = new Task<Void>() {
            @Override
            protected Void call() throws Exception {
                System.out.println("Going red !");
                clip.setFill(Color.RED);
                try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                System.out.println("Back to dark...");
                clip.setFill(Color.RED.interpolate(Color.RED, 0.5));
                return null;
            }

        };
        new Thread(task).start();

    }
}

Ошибка заключается в том, что иногда «круг-клип» не меняет цвет, когдазадача заканчивается, и все же методы "System.out.println (...)" вызываются.
Что не так в моем коде и какие советы вы бы мне дали, чтобы решить мою проблему?

...