使用javax.swing.Timer在Java中生成倒数计时器

可能重复:
有条件的停止计时器只能第一次使用?

我很困惑如何使用swing而不是util计时器来制作计时器。

我正在制作一款游戏,用户必须在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"); } 

什么都不做,不知道为什么。

这就是我制作倒数计时器的方法:

 Timer timer = new Timer(1000, new TimerListener()); class TimerListener implements ActionListener{ int elapsedSeconds = 30; public void actionPerformed(ActionEvent evt){ elapsedSeconds--; timerLabel.setText(elapsedSeconds) if(elapsedSeconds <= 0){ timer.stop(); wrong() // fill'er up here... } } }