Как исполнить метод несколько раз один за одним?

279
06 апреля 2017, 18:12

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

@FXML Label MINUTES;
@FXML Label SECONDS;
@FXML private Button StartTimer;
@FXML private Button STOPTIMER;
Timer timer_sec = new Timer();
int sec;
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 > 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(22);
TIMER_funk(33);
TIMER_funk(22);
TIMER_funk(33);

Ниже моя попытка с помощбю Thread:

Thread threadA = new Thread(new Runnable(){
    public void run(){
        {
            TIMER_funk(22);   
    //другие thread's отличвются только названием и TIMER_funk(33); TIMER_funk(44);
        }
    }
}, "Thread A");
threadA.start();
if(threadA.isAlive()==false){   
    threadA.join();
    threadB.start();
}
if(threadB.isAlive()==false){
    threadB.join();
    threadC.start();
}

Но этот код не работает, все методы запускаются сразу, ускоряя обратный отчет в разы. Что делать? Меня тут только код спасет.

Есть не рабочий вариант метода - в Label не работает setText(); но в System.printline(); почему то работает, цифры выводятся.

public int TIMER_funk(int secs)  {
 seco=secs;
  timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
           if(seco!=0){
           seco--;
           sec = secs;
            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);
           }     
           if(seco==0){timer.cancel();};
        }
    }, 1000, 1000);
        return 1;
}
READ ALSO
Вернуть данные из дочернего JFrame Swing Java

Вернуть данные из дочернего JFrame Swing Java

Подскажите пожалуйстаЯ открываю в JFrame другой JFrame - дочерний

330
Подключение dll в Maven проект. Jacob

Подключение dll в Maven проект. Jacob

Перевожу проект на maven и столкнулся со следующей проблемой: Есть такая библиотека - jacobИ у нее кроме jar есть 2 dll

265
Apache Tomcat не видит класс Java

Apache Tomcat не видит класс Java

Всем доброго времени суток! Разрабатываю сервлет (Eclipse Indigo, Apache Tomcat, J2EE), опыта очень малоВ сервлете надо задействовать метод Java-класса, который...

234
Почему центор и изображение в окне изменяет свой размер относительно размера окна?

Почему центор и изображение в окне изменяет свой размер относительно размера окна?

до этого использовал отрисовку AWTGraphics2d по мере разработки моего приложения столкнулся с проблемой сильных тормозов и пришлось браться за opengl...

178