カウントダウンを行うためのタイマーを作成しようとしています(ロケットの打ち上げのように:3-2-1-Go)。私が持っているものは一度だけ実行するようです。値が0に達するまで、繰り返し(ほぼ再帰的に)実行する必要があります。
ご覧のとおり、これの進捗状況を追跡するためのさまざまなprintlnステートメントがあります。これが私の出力です:
Coundownコンストラクターで
ActionListenerで
カウント・ダウン
3
何が問題なのかというと、次の出力が欠落しているということです。
2
1
行け
これは、このタイマーが実際にカウントダウンしていないことを示しています。1秒待ってから終了しているようです。
タイマーがゼロになるまでこれを呼び出すにはどうすればよいですか?ありがとうございました!
public class StopWatch {
JFrameMath myTest;
int seconds;
/* Constructor */
public StopWatch(JFrameMath thisTest, int sec) {
myTest = thisTest;
seconds = sec;
myTest.hideTestButtons(true);
Countdown display = new Countdown(myTest);
}
}
class Countdown extends JFrame implements ActionListener {
private Timer myTimer = new Timer(250, this);
JFrameMath myTest;
public Countdown(JFrameMath thisTest) {
System.out.println("in Coundown constructor");
myTimer.setInitialDelay(1150);
myTest = thisTest;
myTimer.start();
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("in ActionListener");
int countSeconds = 3;
if(countSeconds == 0) {
myTest.showTimeRemaining("Go");
myTimer.stop();
System.out.println("done");
} else {
System.out.println("counting down");
myTest.showTimeRemaining(""+countSeconds);
countSeconds--;
}
myTimer.stop();
myTest.hideTestButtons(false);
}
}
public void showTimeRemaining(JFrameMath thisTest, String numSec) {
System.out.println(numSec);
lblCountdown.setText(numSec);
thisTest.pack();
}