자바로 카운트 다운 타이머 만들기
오늘은 타사 라이브러리에 의존하지 않고 두 가지 방법을 사용하여 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!
Timer
및TimerTask
를 사용하는 Java의 카운트 다운 타이머
이 예에서는java.util
패키지와 함께 제공되는Timer
및TimerTask
라는 두 개의 클래스를 사용합니다. 두 클래스 모두 백그라운드 스레드에서 실행할 작업을 예약하는 데 사용됩니다. 이 예에서는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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn