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!
Timer と TimerTask を使用した Java のカウントダウンタイマー
この例では、java.util パッケージに付属する Timer と TimerTask の 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);
}
}
出力:

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