2016-11-12 2 views
0

중간에 이벤트 처리기를 일시 중지하는 방법을 알지 못합니다. 가능한 경우 알지 못합니다. 사실, 첨부 된 코드에서 다음과 같이 표현할 수 있습니다. 플레이어가 셀을 클릭하면 UI가 플레이어가 클릭 한 내용에 따라 셀을 업데이트합니다. 그런 다음 UI가 2 초 동안 일시 중지됩니다. 그리고 컴퓨터가 그 후에 재생되어 셀을 업데이트합니다.이벤트 처리기의 중간에서 UI를 일시 중지하는 방법은 무엇입니까?

for (Cell cell : cells) { 
     if (cell.getHouseNumber() >= 6) { 
      cell.setOnMousePressed(new EventHandler<MouseEvent>() { 
       public void handle(MouseEvent me) { 


         cell.setFill(Color.WHITE); 
         System.out.println(cell.getHouseNumber() - 6); 
         if(player1.sow(cell.getHouseNumber() - 6)){ 

          for (int i = 0; i < cells.length; i++) { 
           if (i < 6) { 
            cells[i].setSeedsNumber(player1.getSeeds(cells[i].getHouseNumber())); 
            try { 
             cells[i].setImage(); 
            } catch (IOException e) { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
            } 

           } 
           else { 
            cells[i].setSeedsNumber(player1.getSeeds(cells[i - 6].getHouseNumber())); 
            try { 
             cells[i].setImage(); 
            } catch (IOException e) { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
            } 
           } 

          } 
          southBoard.setSeedsNumber(player1.getPlayerScore()); 

          playerTurnLabel.setText("Computer playing"); 

//PAUSE THE UI FOR 2s 

          player2.computerMove(); 


          for (int i = 0; i < cells.length; i++) { 
           if (i < 6) { 
            cells[i].setSeedsNumber(player1.getSeeds(cells[i].getHouseNumber())); 
            try { 
             cells[i].setImage(); 
            } catch (IOException e) { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
            } 

           } 
           else { 
            cells[i].setSeedsNumber(player1.getSeeds(cells[i - 6].getHouseNumber())); 
            try { 
             cells[i].setImage(); 
            } catch (IOException e) { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
            } 
           } 

          } 
          playerTurnLabel.setText("Your turn to play"); 


         }else{ 
          playerTurnLabel.setText("Move prohibited ..."); 
         } 
       } 
      }); 
     } 
    } 
+0

시간 소모적 인 계산을 위해 스레드 사용을 고려해야합니다. – abbath

답변

1

당신은 그래서 당신은 기본적으로 당신이 onFinished에 일시 정지 한 후 실행하려는 모든 코드를 이동

southBoard.setSeedsNumber(player1.getPlayerScore()); 
playerTurnLabel.setText("Computer playing"); 
playerTurnLabel.getScene().getRoot().setDisable(true); 

PauseTransition pause = new PauseTransition(Duration.seconds(2)); 
pause.setOnFinished(event -> { 
    player2.computerMove(); 

    // etc etc 

    playerTurnLabel.getScene().getRoot().setDisable(false); 
}); 
pause.play(); 

뭔가를 할 수 있습니다) 내가 아주 절망적이다, 답변 주셔서 대단히 감사합니다 매니저. 일시 중지 된 UI를 사용 중지하거나 사용 중지 할 필요가 없을 수도 있습니다. 필요하지 않으면 setDisable(...)으로 전화를 제거 할 수 있습니다.

+0

대단히 감사합니다! – Louis

관련 문제