У меня цикл фоновой задачи выглядит так:
Timeline fiveSecondsWonder = new Timeline(new KeyFrame(Duration.seconds(1), event -> {
if (hourNow >= cashCutOff_Start && hourNow <= cashCutOff_End - 1) {
//Run the code once
}
}));
fiveSecondsWonder.setCycleCount(Timeline.INDEFINITE);
fiveSecondsWonder.play();
Этот код делает цикл каждую секунду. Но я хочу сделать одну строку кода исполняемой после запуска этого кода.
Не имеет отношения к вашей проблеме: пожалуйста, изучите соглашения об именах Java и придерживайтесь их. Связано: довольно неясно, что вам нужно - пожалуйста, предоставьте минимальный воспроизводимый пример, который демонстрирует проблему и то, как она не соответствует вашим требованиям.
@kleopatra, где он не следует соглашениям об именах?
подчеркивания должны быть в верблюжьем регистре
подчеркивания - не самое красивое зрелище, но они разрешены (согласно интерпретации соглашений Oracle имеет oracle.com/technetwork/java/codeconventions-135099.html )
хе-хе, это имя переменной выглядит знакомо: stackoverflow.com/questions/9966136/… :D
хахахаха правда
@Stultuske не видит в этом документе никаких утверждений, предлагающих использовать символы подчеркивания (за исключением констант, которые написаны заглавными буквами, поэтому у них нет других средств для разделения слов) ... очевидно, что они разрешены языком (иначе компилятор будет жаловаться) но нарушая соглашения об именах... повторяя, чтобы довести дело до конца <g>
@kleopatra во всех рекомендациях говорится, что имена переменных не должны НАЧАТЬ с символа подчеркивания: «Имена переменных не должны начинаться с символов подчеркивания _ или знака доллара $, даже если оба они разрешены». Проблема с подобными предложениями в руководствах заключается в том, что они немного двусмысленны и открыты для интерпретации.
@Stultuske нет ничего открытого - они четко указывают, что вы должны сделать для разделения слов, и это верблюжий случай, ничего больше. По соглашению мы должны следовать утвердительным предложениям в соглашениях :)




Простое решение в два шага.
Создайте логическую переменную:
private boolean hasRun = false;
Добавьте оператор if на временную шкалу:
Timeline fiveSecondsWonder = new Timeline(new KeyFrame(Duration.seconds(1), event -> {
//check if code has run before
if (!hasRun){
//this will run only once
//by setting hasRun = true;
hasRun=true;
//add your code here...
}
//this code will run in every KeyFrame
//add your code here...
}));
fiveSecondsWonder.setCycleCount(Timeline.INDEFINITE);
fiveSecondsWonder.play();
Просто удалите fiveSecondsWonder.setCycleCount(Timeline.INDEFINITE);
Либо создайте 2 отдельных
Timeline, либо используйте логическую переменную для проверки внутри, чтобы узнать, выполнялась ли уже эта часть кода.