2017-12-22 4 views
0

이 문제는 이전에 다뤘던 것 같지만 실제로 문제를 해결 한 답을 찾지 못했습니다. 이 코드의 발췌에서 버튼 클릭 (lblMessage의 텍스트 설정)에 대한 반응을 표시하고 잠시 기다린 다음 다른 이미지를 표시하려고합니다.UI를 차단하지 않고 지정된 시간 동안 Java를 일시 중지하는 방법은 무엇입니까?

"wait 1000ms"로 표시된 섹션에서 나는 경과 된 시스템 시간을 계산할뿐만 아니라 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

관련 문제