2013-02-10 2 views
0

Я хочу использовать анимацию на кнопке, которую я создал в своем приложении BlackBerry. Анимация отлично работает в первый раз, когда я нажимаю кнопку. При первом нажатии кнопка запускает анимацию (мигает). При втором нажатии мигание останавливается. Однако, когда я снова нажимаю кнопку (третий раз), мигание должно начинаться снова. Тем не менее, я получаю сообщение об ошибке:Добавление анимации к кнопке в BlackBerry

App Error 104 Uncaught: IllegalStateException 

код для создания кнопки и добавления анимации выглядит следующим образом:

final Bitmap image000 = Bitmap.getBitmapResource("panic.png"); 
final Bitmap image001 = Bitmap.getBitmapResource("panicon.png"); 

final Timer animationTimer = new Timer(); 

final BitmapField animationField = new BitmapField(image000,BitmapField.FOCUSABLE){ 

    protected boolean navigationClick(int status, int time) 
    { 
      if(flag){ 
        animationTask.cancel(); 
        flag=false; 
      }else{ 
        animationTimer.scheduleAtFixedRate(animationTask, 0, 100); 
        flag=true; 
      } 

     return true; 
    } 


}; 

animationTask = new TimerTask() { 
    public void run() { 
     if(counter == 0){ 
      animationField.setBitmap(image000); 
     } 
     if(counter == 1){ 
      animationField.setBitmap(image001); 
      counter = -1; 
     } 

     counter++; 
    } 
}; 


add(animationField); 

EDIT: Я отлажена мой код, и ошибка происходит в цикле, что запускает поток. Отмена потока кажется прекрасной. Я потерял, в чем проблема. Пожалуйста, направляйте.

+1

Вы пытаетесь обновить пользовательский интерфейс (animationField) из другого потока. Проверьте эти ответы, http://stackoverflow.com/a/8954864/431639, http://supportforums.blackberry.com/t5/Java-Development/illegalStateException-when-updating-the-labelField/m-p/835999#M147132. – Rupak

+0

Спасибо за ссылки @Rupak, я пробовал предложения по ссылке, но это не исправляет проблему. Я отлаживал свой код, и ошибка возникает в цикле, который запускает поток. Отмена потока кажется прекрасной. Я потерял, в чем проблема. Пожалуйста, направляйте. – Sarah

+2

Проверьте этот ответ, http://stackoverflow.com/a/1041692/431639. Я думаю, вам нужно создать новый экземпляр animationTask. – Rupak

ответ

1

попробовать это -

TimerTask animationTask; 
BitmapField animationField; 
final Bitmap image000 = Bitmap.getBitmapResource("panic.png"); 
final Bitmap image001 = Bitmap.getBitmapResource("panicon.png"); 
final Timer animationTimer = new Timer(); 
animationField = new BitmapField(image000,BitmapField.FOCUSABLE){ 
    protected boolean navigationClick(int status, int time) 
      { 
      if(flag){ 
       animationTask.cancel(); 
       flag=false; 
      }else{ 
       animationTask = new TimerTask() { 
         public void run() { 
          if(counter == 0){ 
           animationField.setBitmap(image000); 
          } 
          if(counter == 1){ 
           animationField.setBitmap(image001); 
           counter = -1; 
          } 
        counter++; 
         } 
        }; 
       animationTask.run(); 
       animationTimer.scheduleAtFixedRate(animationTask, 0, 100); 
       flag=true; 
      } 

       return true; 
      } 


    }; 
animationTask = new TimerTask() { 
     public void run() { 
      if(counter == 0){ 
       animationField.setBitmap(image000); 
      } 
      if(counter == 1){ 
       animationField.setBitmap(image001); 
       counter = -1; 
      } 
counter++; 
     } 
    }; 

add(animationField);