解决方案 »

  1.   

    第一个问题,你本来每次点击后都执行new aseekth();,当然id每次都不一样。
    第二个问题,是你自身业务逻辑问题,请仔细检查你的逻辑是否正确。
      

  2.   

    额不好意思,我还是不太明白,能否说得再清楚些~你点击暂停的时候并没有操作线程
    那你看我这样做:
    当点击暂停时seekbar.wait();
    点击继续播放时seekbar.notify();
    可以吗?
      

  3.   

    额不好意思,我还是不太明白,能否说得再清楚些~你点击暂停的时候并没有操作线程
    那你看我这样做:
    当点击暂停时seekbar.wait();
    点击继续播放时seekbar.notify();
    可以吗?
    应该可以,不过最好是线程去刷新界面而不做业务逻辑操作,,,
      

  4.   

    不好意思,又来麻烦你了~我通过休眠、唤醒线程来更新seekbar,但还是弄不对,请指点一二~skb_audio = (SeekBar) this.findViewById(R.id.SeekBar01);
    skb_audio.setOnSeekBarChangeListener(new SeekBarChangeEvent());
    class ClickEvent implements View.OnClickListener {
    public void onClick(View v) {
    synchronized (skb_audio) {        //skb_audio是所要更新的seekbar,先将他上锁
    if (v == btn_start_audio) {
    // 设置audio标记,以便控制各自的进度条变化
    isAudio = true;
    // 恢复到未初始化的状态
    m.reset();
    // 有两种方式获取资源文件:从工程的resource目录,或是指定路径;鉴于文件比较大,所以本示例均是从SD卡获取
    m = MediaPlayer.create(MainActivity.this,
    R.raw.big);// 读取音频
    // 设置SeekBar的长度
    skb_audio.setMax(m.getDuration());

    // 每次播放都将进度条重置为0
    skb_audio.setProgress(0);
    m.start(); // 播放

    // 启动一个新线程用于更新音频的进度条
    aseekth as = new aseekth();
    as.start();
    System.out.println(as.getId());

    }
    else if (v == btn_stop_audio) {
    m.pause();
    try {
    skb_audio.wait();
    }
    catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    System.out.println("cannot wait");
    }
    }
    else if (v == btn_continue_audio) {
    skb_audio.notify();
    m.start();
    }
    }
                  }
    }

     // SeekBar进度改变事件 class SeekBarChangeEvent implements
    SeekBar.OnSeekBarChangeListener {

    public void onProgressChanged(SeekBar seekBar,
    int progress, boolean fromUser) {
    }

    public void onStartTrackingTouch(SeekBar seekBar) {
    }

    public void onStopTrackingTouch(SeekBar seekBar) {
    m.seekTo(seekBar.getProgress());
    }
    }
     //音频进度条线程处理 private class aseekth extends Thread {
    public void run() {
    try {
    while (isAudio) {
    if (skb_audio.getProgress() < m
    .getCurrentPosition()) {
    skb_audio.setProgress(m
    .getCurrentPosition());
    sleep(100);
    }
    }
    }
    catch (Exception e) {}
    }
    }点击完btn_stop_audio后音乐停止,seekbar也停止更新;
    但是, btn_continue_audio点击没反应,然后一会就弹出个对话框,说无响应,是否需要等待。
      

  5.   

    改成这样还是不行,请问这样哪有错了?skb_audio = (SeekBar) this.findViewById(R.id.SeekBar01);
    skb_audio.setOnSeekBarChangeListener(new SeekBarChangeEvent());
     
     
    class ClickEvent implements View.OnClickListener {
            public void onClick(View v) {
                synchronized (skb_audio) {        //skb_audio是所要更新的seekbar,先将他上锁
                    if (v == btn_start_audio) {
                        // 设置audio标记,以便控制各自的进度条变化
                        isAudio = true;
                        // 恢复到未初始化的状态
                        m.reset();
                        // 有两种方式获取资源文件:从工程的resource目录,或是指定路径;鉴于文件比较大,所以本示例均是从SD卡获取
                        m = MediaPlayer.create(MainActivity.this,
                                R.raw.big);// 读取音频
                        // 设置SeekBar的长度
                        skb_audio.setMax(m.getDuration());
                         
                        // 每次播放都将进度条重置为0
                        skb_audio.setProgress(0);
                        m.start(); // 播放
                         
                        // 启动一个新线程用于更新音频的进度条
                        aseekth as = new aseekth();
                        as.start();
                        System.out.println(as.getId());
                         
                    }
                    else if (v == btn_stop_audio) {
                        m.pause();
                        try {
                            skb_audio.wait();
                        }
                        catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                            System.out.println("cannot wait");
                        }
                    }
                    else if (v == btn_continue_audio) {
                        skb_audio.notify();
                        m.start();
                    }
                }
                  }
        }
         
         // SeekBar进度改变事件
     
        class SeekBarChangeEvent implements
                SeekBar.OnSeekBarChangeListener {
             
            public void onProgressChanged(SeekBar seekBar,
                    int progress, boolean fromUser) {
            }
             
            public void onStartTrackingTouch(SeekBar seekBar) {
            }
             
            public void onStopTrackingTouch(SeekBar seekBar) {
                m.seekTo(seekBar.getProgress());
            }
        }
         
     
         //音频进度条线程处理
     
        private class aseekth extends Thread {
            public void run() {
                try {
                    while (isAudio) {
                        if (skb_audio.getProgress() < m
                                .getCurrentPosition()) {
                            skb_audio.setProgress(m
                                    .getCurrentPosition());
                            sleep(100);
                        }
                    }
                }
                catch (Exception e) {}
            }
        }
      

  6.   

    那就是线程阻塞了,btn_continue_audio是不是和start是在一个activity里面?