Java でカウントダウンタイマーを作成する

Rupam Yadav 2023年10月12日
  1. ScheduledExecutorService を使用した Java のカウントダウンタイマー
  2. TimerTimerTask を使用した Java のカウントダウンタイマー
Java でカウントダウンタイマーを作成する

今日は、サードパーティのライブラリに依存せずに、2つの方法を使用して Java でカウントダウンタイマーを作成する方法を示します。GUI ウィンドウまたはコンソールでタイマーを使用してテストすることができます。以下のコードをチェックしてください!

ScheduledExecutorService を使用した Java のカウントダウンタイマー

この最初のメソッドでは、ExecutorService インターフェイスを使用してそのメソッド newScheduledThreadPool() を呼び出します。これにより、同じ固定数の割り当てられたスレッドを使用するスレッドプールが作成されます。newScheduledThreadPool() メソッドでは、プールに必要なスレッドの数を渡します。この場合、タイマーを実行するスレッドは 1つだけです。

Executors.newScheduledThreadPool() 関数は、scheduler という名前の ScheduledExecutorService オブジェクトを返します。次に、Runnable インターフェイスから run() メソッドをオーバーライドします。実行可能インスタンスは、スレッドを実行するために使用されます。Runnable では、変数 countdownStarter を作成し、カウントダウンタイマーを開始する場所からの秒数で初期化します。

ここで、run() メソッド内に countdownStarter を出力し、その値を 1つ減らします。タイマーがゼロに達したときにタイマーを停止するには、countdownStarter 値をチェックする条件を作成します。その値がゼロ未満になると、メッセージを出力し、scheduler.shutdown() コマンドを使用してエグゼキューターサービスである scheduler をシャットダウンします。

最後に、scheduler オブジェクトを使用して、指定されたアクションを定期的に実行し、4つの引数をとる scheduleAtFixedRate() メソッドを呼び出します。最初の引数は runnable インスタンスです。2つ目は、最初の実行の時間遅延です。3つ目は、アクション間の遅延です。ここでは、4 番目の引数が示すように、遅延を 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 の 2つのクラスを使用します。両方のクラスは、バックグラウンドスレッドで実行するタスクをスケジュールするために使用されます。この例では、jFrame オブジェクトを使用して GUI ウィンドウにタイマーを表示します。最初に jFrame オブジェクトを作成し、次にタイマーのテキストを表示する jLabel を作成します。フレームのレイアウトを FlowLayout() として設定し、ウィンドウの位置とサイズを設定します。

次に、jLabel をフレームに追加します。カウントダウンタイマーを作成するには、Timer オブジェクトを作成し、そのメソッド scheduleAtFixedRate() を呼び出します。このメソッドは、名前が示すように、指定されたタスクを固定レートでスケジュールして繰り返します。

ここで、scheduleAtFixedRate() メイトが最初の引数として TimerTask オブジェクトを受け取るため、new TimerTask() を使用してオブジェクトを作成します。2 番目と 3 番目の引数については、実行するタスクと、各実行間のミリ秒単位の期間をスケジュールします。

次のステップでは、変数を作成し、カウントダウンを開始する番号で初期化する必要があります。次に、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);
  }
}

出力:

Java カウントダウンタイマー

著者: 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