当前位置:编程学习 > wap >>

android mediaplayer带进度条播放点击返回时候出现IllegalStateException

当我点击返回时候128行设置进度条值时候就出现IllegalStateException。请高手帮忙分析。
代码:

th = new Thread(new Runnable(){ 
      @Override 
      public void run() { 
       while(true){ 
               progressBar.setProgress(mediaPlay.getMediaPlayer().getCurrentPosition()); //128行此行异常  获得当前播放的进度值 
      try { 
       Thread.sleep(1000); 
      } catch (Exception e) { 
       
       e.printStackTrace(); 
      } 
     } 
    }});
     th.start(); 
     
    } catch (Exception e) {
     th.stop();
     e.printStackTrace();
    }


返回键事件

//当按下返回把mediaplay销毁
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == event.KEYCODE_BACK) {
progressBar=null;
mediaPlay.stop();
MediaPlayer mediaplayer = mediaPlay.getMediaPlayer();
mediaplayer = null;
th.yield();
return true;
}
return super.onKeyDown(keyCode, event);
}



01-10 02:41:44.900: ERROR/AndroidRuntime(921): java.lang.IllegalStateException
   at android.media.MediaPlayer.getCurrentPosition(Native Method)
   at com.zyt.systravel.activity.ExplainMediaActivity$1$2.run(ExplainMediaActivity.java:128)
   at java.lang.Thread.run(Thread.java:1060)
--------------------编程问答-------------------- progressBar.setProgress 好像在需要在创建窗口的那个线程中调用才行。 --------------------编程问答-------------------- 在progressBar的监听事件中处理(onProgressChanged) --------------------编程问答-------------------- mediaPlay.stop();
必须在mediaPlay.isPlaying()返回true时才能执行stop,否则Logcat里可以看到报error,但不影响运行。 --------------------编程问答--------------------  progressBar.setProgress(mediaPlay.getCurrentPosition());
这样可以吗?
另外:更新UI必须在UI线程里才能调用 --------------------编程问答-------------------- 我也是遇到这个问题,求解答
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,