2017-12-22 8 views
0

これはこれまで説明したことがありますが、実際に問題を解決した回答は見つかりませんでした。 このコードの抜粋では、ボタンのクリック(lblMessageのテキストの設定)に対する反応を表示し、1秒待って別の画像を表示したいとします。UIをブロックせずに指定時間Javaを一時停止するにはどうすればよいですか?

「wait 1000 ms」とマークされたセクションでは、経過時間を計算するだけでなく、Thread.sleep()を試しました。ただし、どちらの場合も、lblMessageは待機時間後にのみ入力されます。

私はTimerに出くわしましたが、それを使用する構文(特に入力する必要があるタスク)を理解できません。

ご協力いただきありがとうございます。

public void answerButtonClicked(ActionEvent event) { 

    endTime = System.nanoTime(); 
    elapsedTime = (endTime - startTime); 
    String answerTime = String.format("%.2f", (elapsedTime/1000000000)); 

    Button btnAnswer = (Button)event.getSource(); 
    String answer = btnAnswer.getId();  
    String correctAnswer = mpScenes.get(model.getNextScene(round-1)); 

    if (answer.equals(correctAnswer)) { 
     lblMessage.setText("Richtig (" + answerTime + "s)"); 
    } else { 
     lblMessage.setText("Falsch (" + answerTime + "s)"); 
    } 

    **--<wait 1000 ms>--** 

    if (round < numberOfRounds) { 
     round++; 
     setNewMainImage(round); 
    } else { 
     endOfGame(); 
    } 
} 

答えて

1

このようなもので、あなたの**--<wait 1000 ms>--**を交換してください:

Timer timer = new Timer(1000, new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     if (round < numberOfRounds) { 
      round++; 
      setNewMainImage(round); 
     } else { 
      endOfGame(); 
     } 

    } 
}); 

timer.start(); 

javax.swing.TimerあなたはスイングUIのディスパッチスレッドで、後に実行されるいくつかのアクションを遅らせることができます。

+0

多くのありがとう、これは動作します! – Cord

関連する問題