자바로 카운트 다운 타이머 만들기

Rupam Yadav 2023년10월12일
  1. ScheduledExecutorService를 사용하는 Java의 카운트 다운 타이머
  2. TimerTimerTask를 사용하는 Java의 카운트 다운 타이머
자바로 카운트 다운 타이머 만들기

오늘은 타사 라이브러리에 의존하지 않고 두 가지 방법을 사용하여 Java에서 카운트 다운 타이머를 만드는 방법을 보여 드리겠습니다. GUI 창이나 콘솔에서 타이머를 사용하여 테스트 할 수 있습니다. 아래에있는 코드를 확인하세요!

ScheduledExecutorService를 사용하는 Java의 카운트 다운 타이머

이 첫 번째 메소드에서는ExecutorService인터페이스를 사용하여 동일한 고정 된 수의 할당 된 스레드를 사용하는 스레드 풀을 생성하는newScheduledThreadPool()메소드를 호출합니다. newScheduledThreadPool()메소드에서 풀에서 원하는 스레드 수를 전달합니다. 이 경우 타이머를 실행하는 스레드는 하나만 필요합니다.

Executors.newScheduledThreadPool()함수는scheduler라고 명명 한ScheduledExecutorService객체를 반환합니다. 다음으로Runnable인터페이스에서run()메소드를 재정의합니다. Runnable인스턴스는 스레드를 실행하는 데 사용됩니다. Runnable에서countdownStarter변수를 생성하고 카운트 다운 타이머를 시작하려는 위치에서 초 단위로 초기화합니다.

이제run()메소드 내에서countdownStarter를 인쇄하고 값을 1 씩 줄입니다. 0에 도달했을 때 타이머를 중지하기 위해countdownStarter값을 확인하는 조건을 만듭니다. 값이 0보다 작아지면 메시지를 인쇄하고scheduler.shutdown()명령을 사용하는 실행자 서비스 인scheduler를 종료합니다.

마지막으로scheduler객체를 사용하여 주어진 액션을 주기적으로 실행하고 4 개의 인수를 취하는scheduleAtFixedRate()메소드를 호출합니다. 첫 번째 인수는runnable인스턴스입니다. 두 번째는 첫 번째 실행의 시간 지연입니다. 세 번째는 작업 간의 지연입니다. 여기서 우리는 네 번째 주장에서 알 수 있듯이 1 초와 같아야하는 지연 시간을 지정했습니다.

import static java.util.concurrent.TimeUnit.SECONDS;

import java.util.concurrent.*;

public class Countdown {
  public static void main(String[] args) {
    final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

    final Runnable runnable = new Runnable() {
      int countdownStarter = 20;

      public void run() {
        System.out.println(countdownStarter);
        countdownStarter--;

        if (countdownStarter < 0) {
          System.out.println("Timer Over!");
          scheduler.shutdown();
        }
      }
    };
    scheduler.scheduleAtFixedRate(runnable, 0, 1, SECONDS);
  }
}

출력:

20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Timer Over!

TimerTimerTask를 사용하는 Java의 카운트 다운 타이머

이 예에서는java.util패키지와 함께 제공되는TimerTimerTask라는 두 개의 클래스를 사용합니다. 두 클래스 모두 백그라운드 스레드에서 실행할 작업을 예약하는 데 사용됩니다. 이 예에서는jFrame개체를 사용하여 GUI 창에 타이머를 표시합니다. 먼저jFrame객체를 만든 다음 타이머 텍스트를 표시하는jLabel을 만듭니다. 프레임의 레이아웃을FlowLayout()으로 설정하고 창의 위치와 크기를 설정합니다.

다음으로jLabel을 프레임에 추가합니다. 카운트 다운 타이머를 생성하기 위해Timer객체를 생성하고 이름에서 알 수 있듯이 지정된 작업을 일정 속도로 예약하고 반복하는scheduleAtFixedRate()메서드를 호출합니다.

이제scheduleAtFixedRate()메이트가TimerTask객체를 첫 번째 인수로 사용하므로new TimerTask()를 사용하여 객체를 만듭니다. 두 번째 및 세 번째 인수의 경우 실행할 작업과 각 실행 사이의 기간 (밀리 초)을 예약합니다.

다음 단계에서는 변수를 만들고 카운트 다운을 시작할 숫자로 초기화해야합니다. 그런 다음run()메서드를 호출하고jLabel구성 요소의 텍스트를i로 설정합니다. 타이머를 중지하려면timer.cancel()을 호출합니다.

import java.awt.*;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.*;

public class Countdown {
  public static void main(String[] args) {
    JFrame jframe = new JFrame();
    JLabel jLabel = new JLabel();
    jframe.setLayout(new FlowLayout());
    jframe.setBounds(500, 300, 400, 100);

    jframe.add(jLabel);
    jframe.setVisible(true);

    Timer timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {
      int i = 20;

      public void run() {
        jLabel.setText("Time left: " + i);
        i--;

        if (i < 0) {
          timer.cancel();
          jLabel.setText("Time Over");
        }
      }
    }, 0, 1000);
  }
}

출력:

자바 카운트 다운 타이머

작가: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

관련 문장 - Java Timer