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