私は単純な音楽プレーヤーを開発しています。したがって、スレッドによって更新されるSeekBarがあります。しかし、2回目の曲を選択すると、クラッシュします(java.lang.IllegalThreadStateException:スレッドが既に開始されています)。java.lang.IllegalThreadStateException:スレッドがすでに開始されている
これは私のコードです:
updateSeekBar = new Thread(){
@Override
public void run(){
int totalDuration = mp.getDuration();
int currentPosition = 0;
while(mp != null && currentPosition<totalDuration){
try{
sleep(500);
currentPosition = mp.getCurrentPosition();
sb.setProgress(currentPosition);
}catch (InterruptedException e){
Log.i(TAG, "Thread ERROR");
e.printStackTrace();
}
}
}
};
...
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Log.i(TAG, "Thread State: " + updateSeekBar.getState().toString());
Uri u = Uri.parse(songList.get(position).getPath().toString());
if(mp!=null){ mp.stop(); mp.reset(); mp.release(); }
mp = MediaPlayer.create(getApplicationContext(), u);
mp.start();
sb.setMax(mp.getDuration());
updateSeekBar.start();
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
}
@Override
public void onStartTrackingTouch(SeekBar seekBar){
}
@Override
public void onStopTrackingTouch(SeekBar seekBar){
mp.seekTo(seekBar.getProgress());
}
});
私はクラッシュを避けることができますか?
logcatエラー:(118、23)エラー:それは 'removeCallbacks'あるシンボル方法removeAllCallbacks(MyUpdater) – xRobot
を見つけることができません。 – Blackbelt
エラー:(9,8)エラー:MyUpdaterは抽象ではなく、抽象メソッドrun()をRunnableでオーバーライドしません – xRobot