可能重复:
有条件的停止计时器只能在第一次工作?
我对如何使用 swing 而不是 util timer 制作计时器感到非常困惑。
我正在制作一个游戏,用户必须在 30 秒的时间内回答问题。我有一个显示时间的 PlayFrame,还有一个名为 startTimer 的 PlayFrame 内的方法,其中包含所有计时器内容。
public static void startTimer() {
int elapsedSeconds = 0;
javax.swing.Timer myTimer = new javax.swing.Timer(1000, new MyTimerActionListener());
elapsedSeconds++;
if (elapsedSeconds == 30) {
myTimer.stop();
timerLabel.setText("0");
wrong();
} else {
String text = String.format("f", 30 - elapsedSeconds);
timerLabel.setText(text);
}
if (myTimer != null && myTimer.isRunning()) {
myTimer.stop();
myTimer = null;
timerLabel.setText("0");
} else {
elapsedSeconds = 0;
myTimer = new javax.swing.Timer(1000, new MyTimerActionListener());
myTimer.start();
String text = String.format("t", 30);
timerLabel.setText(text);
}
}
我想要这个方法做的是有一个计时器,从 30 开始倒计时,直到问题被正确回答。如果答案回答不正确,我希望计时器停止。
对于一个答案,也许是一些伪代码(或真实代码)让我朝着正确的方向前进。这是供个人使用的,不是家庭作业或任何东西。
请记住,这是我整个代码的一部分,它需要与它的其他部分一起使用。我会根据要求提供更多信息,谢谢!
编辑:新的 startTimer() 方法注意所有 System.out.print 仅用于测试:
public static void startTimer() {
class TimerListener implements ActionListener {
Timer timer = new Timer(1000, new TimerListener());
int elapsedSeconds = 30;
String seconds = Integer.toString(elapsedSeconds);
@Override
public void actionPerformed(ActionEvent evt) {
timer.start();
if (elapsedSeconds == 0) {
//System.out.print("here");
timer.stop();
PlayFrame.wrong();
}
else{
//System.out.print("hersfde");
elapsedSeconds--;
PlayFrame.timerLabel.setText(seconds);
}
//System.out.println(elapsedSeconds);
}
}
//System.out.print("l");
}
什么都不做,也不知道为什么。