Я пишу приложение для управления звуком, в котором я использую много индикаторов, и один из них является индикатором «отсечения».
Как это должно работать, так это: если уровень звука превышает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 (...)" вызываются.
Что не так в моем коде и какие советы вы бы мне дали, чтобы решить мою проблему?