1

粗雑な方法ではなく Java Swing タイマーを使用するように勧められましたThread.sleep(2000);が、これは問題を引き起こしています。

具体的には、タイマーを実行する関数を呼び出す方法がわかりません。タイマーが 20 分だとすると、次のように言えます。

for(int i = 0; i<10; i++){
   call20MinuteTimer();
}

次に、そのタイマーは 10 回実行されます (つまり、200 分間ループします)。Thread.sleep() を使用すると、上記の wwas は非常に簡単です。私はそれを言うことができました。

これが私のコードが今どのように見えるかです:

    ActionListener a9 = new ActionListener(){
        public void actionPerformed(ActionEvent evt){

        DateFormat dateFormat = new SimpleDateFormat("HH:mm");
        String currentTime = (String) dateFormat.format(new Date());

        combo2.append("You completed " + i + ""
        +  " pomodoros! At " + currentTime + " \n");
         Toolkit.getDefaultToolkit().beep();
        }
      };



    Timer newTimer = new Timer(500, a9);
    newTimer.start();
    newTimer.setRepeats(false);

上記のコード行をすべて関数 (メインの外側) に入れると、一度だけ呼び出されます。

多分私は何が起こっているのかはっきりしていませんか?私はこれで迷っています。ありがとう

4

1 に答える 1

3

タイマーを「x」回ループさせるには、カウント フィールドを指定します。

ActionListener a9 = new ActionListener(){
  private int count = 0;

  public void actionPerformed(ActionEvent evt){
    if (count < MAX_COUNT) { // MAX_COUNT is an int constant, here, 10

      // ... do something

    } else {
      // we're done -- stop the Timer
      ((Timer)evt.getSource()).stop();
    }
    count++;
  }
};

重要なのは、ループ タイプのアクションを実行しているように見えるかもしれませんが、これを実行するにはループを使用しないことです。代わりに、タイマーによってこのコードを繰り返し呼び出す必要があります。

また、これTimer newTimer = new Timer(500, a9);は 500 ミリ秒ごとに繰り返すようにします。

そして、これnewTimer.setRepeats(false);により、まったく繰り返されなくなります。タイマーを繰り返したい場合は、この行を削除する必要があります。

于 2013-11-09T20:39:57.057 に答える