2013-03-30 8 views
1

Я работаю в школьном проекте, где мы делаем игру бомбардировщика. На игровом поле есть 2 бомбардировщика, Пользователь и ИИ.Невозможно создать обработчик с классом CountDownTimer

Когда пользователь ставит бомбу и уходит, бомба вспыхивает и взрывается, когда наступает время.

Однако это не работает с ИИ.

Когда ИИ ставит бомбу и уходит от него, и когда он должен мигать, а затем взорвать аварии приложения, оставив эту ошибку:

FATAL EXCEPTION: Timer-0 
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 

CountDownTimer код заключается в следующем.

public void explodeAIBomb(){ 


    //Starts countdown 2-4 seconds 

    new CountDownTimer(new Random().nextInt(2000) + 2000, 300) { 
     //test for onTick; bomb flashes 
     boolean test = false; 

    public void onFinish() { 
     //on explosion{ 
     gameBoard[locateAIX][locateAIY] = new Blast();   
     explosionSide(locateAIX, locateAIY); 
     explosionVert(locateAIX, locateAIY); 
     updateView(); 


     //Clear all blasts after 1 second 
     new CountDownTimer(1000, 1000){ 
      public void onFinish(){ 
       for (int x = 0; x < XasLength + 1; x++) { 
        for (int y = 0; y < YasLength + 1; y++) { 
         if(gameBoard[x][y] != null){ 
          if(gameBoard[x][y].getTileId() == BLAST || gameBoard[x][y].getTileId() == BLAST_SIDE || gameBoard[x][y].getTileId() == BLAST_VERT){ 
           gameBoard[x][y] = null; 
          } 
         } 
        } 
       } 
       aiBombPlanted = false; 
       updateView(); 
      } 
      @Override 
      public void onTick(long millisUntilFinished) { 
      }     
     }.start(); 
     updateView(); 
    } 

    //Flashes the bomb every 0.3 second 
    public void onTick(long millisUntilFinished) {    
     if(test){ 
      loadTile(BOMB, r.getDrawable(R.drawable.bomb)); 
      test = false; 
     } 
     else{ 
      loadTile(BOMB, r.getDrawable(R.drawable.bomb2)); 
      test = true; 
     } 
     updateView(); 
    } 
}.start(); 

}

ответ

1

Где-то вы делаете работу пользовательского интерфейса из рабочего потока. Вам нужно вызвать материал, связанный с пользовательским интерфейсом, из основного потока.

думаю такой же вопрос был ответ перед тем.

stackoverflow.com/questions/6354740/how-is-countdowntimer-accessing-ui-inside-ontick-method

+0

Как я могу назвать это в главном потоке? – Oblieapps

+0

nvm, я понял! thnx alot man! – Oblieapps

Смежные вопросы