2017-11-22 3 views
-2
boolean gameContinues = true; 
gameWindow.addKeyListener(new KeyAdapter() { 
    @Override 
    public void keyPressed(KeyEvent e) { 
     if (e.getKeyCode() >= KeyEvent.VK_LEFT && e.getKeyCode() <= KeyEvent.VK_DOWN) { 
      directionGoing = e.getKeyCode() - KeyEvent.VK_LEFT; 
      gameStart = true; 
     } 
    } 
}); 

while (gameContinues) { 
// for(int i = 0; i < 1000000000; i++) { 
//  for(int j = 0; j < 1000000000; j++) { 
//   
//  } 
// } 
    if (gameStart) { 
     start(); 
     gameContinues = false;    
    } 
} 

private void start() { 
    // game operations 
    System.out.println("started"); 
} 

gameStart는 전역 변수이며 초기 값은 false입니다. 일반적으로, 왼쪽, 오른쪽, 위 또는 아래 버튼을 누르면, gameStart 변수가 true로 설정되지만 (gameStart)가 작동하지 않으면 true로 설정됩니다. 그러나 블록에 대해 주석 처리 된 속도로 속도를 줄이면 (gameStart) 제대로 실행됩니다. 왜 이런 일이 일어나는가?블록이 작동하지 않는 이유

+1

보인다. –

답변

0

아마 당신은 소위 '경쟁 조건'에 직면하고 있습니다. 여기 좀 봐 : Race-Condition-Example

왜 루프를 그대로 두지 않으려면 break을 사용하지 않으시겠습니까?

이 당신을 위해 작동합니다 : 당신이 트리거되는 모든 KeyListener 그 조건 사이의 경쟁 조건의 일종 평가되는이 같은

if (gameStart) { 
    start(); 
    break;    
} 
관련 문제