안녕하세요~ 안드로이드르 막 입문하게된 초보입니다.
지금 mp3 음원 재생프로그램을 만들어 보고 있는데요~
재생시 막대 progressBar를 사용하여 재생상태를 보여줄려고 하는데요.
문제는 Thread 아래와 같이 사용하고 정지시 Thread를 stop시키면 에러가 발생합니다.
class ProgressThread implements Runnable {
Thread th;
public void run() {
for(progress=0; progress<=(audioPlay.getDuration()/1000); progress++){
pb.post(new Runnable() {
@Override
public void run() {
pb.setProgress(progress);
}
});
SystemClock.sleep(1000);
}
}
public void stop(){
th = null; // th.stop을 하여도 에러가 발생합니다. 하여 null을 줘봤습니다.
}
public void start(){
th = new Thread(this);
th.start();
}
}
일단 stop을 하여도 에러가 발생하여 Thread를 null을 줘봤습니다.
그랬더니 08-06 01:24:04.836: ERROR/AndroidRuntime(600): java.lang.IllegalStateException 에러가 나버리네요.
에러 발생 지점은 for(progress=0; progress<=(audioPlay.getDuration()/1000); progress++){ 여기입니다.
일반적인 stop을 하였을 때는 08-06 01:21:54.506: ERROR/global(564): java.lang.UnsupportedOperationException 에러가 발생하구요.
제가 쓰레드를 사용을 안해봐서 뭐가 문제인지 잘모르겠습니다.
대충 듣기로는 Thread.stop을 하면 문제가 발생할 수 있다고 들었는데 어떤 방식으로 stop을 시켜줘야 되는건가요?
답변 감사합니다.~
일단 다른분이 하신대로 아래와 같이 Handler.post를 적용 해봤는데요. 그래도 에러가 발생합니다.
java.lang.UnsupportedOperationException 에러와 mpRun 부분에서 java.lang.NullPointerException null에러가 발생하네요.
start는 잘되는데요..
private final Handler mHandler = new Handler();
private boolean done = false;
public void run() {
while(!done){
try {
Thread.sleep(200);
} catch (Exception e) {
Log.e("Thread RunError", e.getMessage());
}
mHandler.post(mpRun);
}
}
private final Runnable mpRun = new Runnable() {
@Override
public void run() {
int currentDuration = audioPlay.getCurrentPosition();
currentTime.setText(changeToMinutes(currentDuration));
pb.setProgress(makePercent(currentDuration, myDuration));
}
};
핸들러를 사용해보세요!