Я пытаюсь создать таймер pomodoro и пытаюсь заставить мои методы запускаться один за другим но они продолжают работать одновременно. Как это исправить?
Я поигрался и исследовал, как работают Timer/TimerTask и ScheduledExecutorService, но после множества неудачных попыток я все еще не понимаю, как их реализовать в моя программа, поэтому она работает так, как задумано.
Все мои усилия привели меня к методу Study() и Stop(). успешно бегут, но при этом они бегут друг на друге. Я пытаюсь сделать так, чтобы метод Study() запускался, завершался, а затем запускался метод Stop().
Вот моя попытка...
Основной класс:
Код: Выделить всё
import java.util.Scanner;
import java.util.concurrent.*;
public class Main{
// METHOD FOR STUDY
static void Study(int x) {
System.out.println("\nSeconds remaining...");
// COUNTDOWN FOR STUDY
Countdown study_clock = new Countdown(x);
Thread study_thread = new Thread(study_clock);
study_thread.start();
}
// METHOD FOR BREAK
static void Stop(int y) {
System.out.println("\nSeconds remaining...");
// COUNTDOWN FOR STUDY
Countdown study_clock = new Countdown(y);
Thread study_thread = new Thread(study_clock);
study_thread.start();
}
// MAIN METHOD
public static void main(String[] args) {
// SIMPLE UI & ALL DATA INPUTS
String ui = """
-----------------------------------------
---------- WELCOME TO POMODORO ----------
-----------------------------------------
""";
System.out.println(ui);
// STUDY
String study_q = "How many minutes would you like to study?: ";
System.out.println(study_q);
Scanner study_input = new Scanner(System.in);
int study_a = study_input.nextInt();
// BREAK
String stop_q = "How long would you like your breaks to be?: ";
System.out.println(stop_q);
Scanner stop_input = new Scanner(System.in);
int stop_a = stop_input.nextInt();
// TIMES REPEATED
String cycles_q = "How many times would you like this cycle to be repeated?: ";
System.out.println(cycles_q);
Scanner cycles_input = new Scanner(System.in);
int cycles_a = cycles_input.nextInt();
// MINUTES TO SECONDS
int study_a_mins = study_a * 60;
int stop_a_mins = stop_a * 60;
// MINUTES TO MILLISECONDS
int snooze = study_a_mins * 60000;
Study(study_a_mins);
try {
Thread.sleep(snooze);
} catch (Exception e){
}
Stop(stop_a_mins);
}
}
Код: Выделить всё
public class Countdown implements Runnable{
private int seconds;
// RECEIVING COUNTDOWN AMOUNT
public Countdown(int seconds) {
this.seconds = seconds;
}
// THE COUNTDOWN PROCESS
public void run(){
for (int i = seconds; i >= 0; i--){
System.out.println(i);
try{
Thread.sleep(1000);
}
catch (Exception e){
System.out.println(e);
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... er-another
Мобильная версия