КАК выполнить метод друг за другом?

258
04 апреля 2017, 10:24

У меня есть метод TIMER_funk()

public void TIMER_funk(int seco)  {
        this.sec = seco;
timer_sec.schedule(new TimerTask() {
@Override
public void run() {
Platform.runLater(new Runnable() {      
     @Override
public void run() {
if(sec==15)
{Alert alert = new Alert(Alert.AlertType.INFORMATION);
    alert.setTitle("You need to work");
    alert.setHeaderText(null);
    alert.setContentText("15 minutes!!!");
    alert.showAndWait();}
        if (sec > 0) {
           sec--;
           int minutes = sec / 60;
           int seconds = sec % 60;
                SECONDS.setTextFill(seconds < 4 ? Color.RED : Color.BLACK);
                MINUTES.setText((minutes < 10?"0":"") + minutes);
                SECONDS.setText((seconds < 10?"0":"") + seconds);
               }else if(sec==0){timer_sec.cancel();return;}  
           }  
         });
        }   
      }, 1000, 1000);      
}

и мне нужно выполнить этот метод в другом методе, который уже создан, последовательно, друг за другом.

TIMER_funk(13);  TIMER_funk(15); //один после другого

Но тут есть проблема, когда я их использую как выше, то скорость обратного счета секунд увеличивается кратно, мне этого не нужно. Один метод отработал, второй начал.

Answer 1

@Kolia, Вам нужен механизм простейших очередей. Код на java не могу привести, так как уже ничего из неё не помню, покажу на псевдокоде

// Создадим переменную в которой будем хранить задачи для последовательного выполнения 
Set<Timer> list = new Set();
// Создадим переменную, которая будет хранить активную задачу, если такая сейчас выполняется
Timer currentTask = null;
// Добавляем в очередь задачу
list.put(timer)
// При добавлении мы кладем её в очередь и проверяем есть ли активная задача
put(Timer task) {
    this.add(task);
    if (!currentTask) {
        currentTask = task;
        currentTask.run();
    }
}

// Метод run должен уметь при завершении удалить себя из очереди и попробовать найти следующую задачу и запустить её
run() {
    // Тут какая-то работа
    Timer newTask = list.popFirst();
    currentTask = newTask;
    currentTask.run();
}  

Итого мы имеем самую простейшую систему очередей заданий, которые при завершении текущей, запускают следующее из очереди.

READ ALSO
Как опубликовать сайт на java сервлетах?

Как опубликовать сайт на java сервлетах?

Есть проект(maven) на java-сервлетах, написан в ideaЛокально работает через томкат

270
Ошибка после релиза альфа версии

Ошибка после релиза альфа версии

Это злой рок какой то, после того как я выложил свое приложение в альфа тестирование понеслись ошибки, причем не только в релиз версии а так...

299