-2

我想通过使用停止按钮来打破线程计时器内部的循环。但是 Ecclips 在 stopsound() 上显示错误“令牌上的语法错误,错误的构造”;线程计时器中的方法。

我知道我们不能在 for 循环中定义函数,这就是为什么会出现错误。但我只是想知道,我们如何使用停止按钮打破线程计时器内部的循环?

stop = (ImageButton) findViewById(R.id.imageButton3);

stop.setOnClickListener(new View.OnClickListener() {    
public void onClick(View v) {
        stopsound();
           }
    });

public void mpsleep() {
    mp.start();
    Thread timer= new Thread(){//create new  thread with anonymous class
        public void run(){
            try{
                for (i= 0;i< maxCount;i++){
                    sleep(5000);//5 pause
                    public void stopsound(){
                            break;
                        }
                }               
            }catch(Exception e){
                e.printStackTrace();//print the stack trace if have an error
            }finally{
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mp.pause();
                        mp.seekTo(0);
                        loop=0;
                        bv.setImageResource(R.drawable.playzz);
                    }
                });
            }
        }
    };
    timer.start();
}

找到了其他方法来打破它,但它只在按下停止按钮 5 秒后才会打破。

int loop=0;
stop.setOnClickListener(new View.OnClickListener() {    
public void onClick(View v) {
    loop=1
       }
});
public void mpsleep() {
Thread timer= new Thread(){
        public void run(){
            try{
                for (i= 0;i< maxCount;i++){
                    sleep(5000);//5 pause
                    if (loop==1){
                        break;
                    }
                }               
            }finally{
                runOnUiThread(new Runnable() {
                    public void run() {
                        mp.pause();
                        mp.seekTo(0);
                        loop=0;
                        bv.setImageResource(R.drawable.play);
                    }
                });
            }}

单击停止按钮后,我们如何立即打破 for 循环?

4

1 回答 1

4

您编写的代码不是有效的 Java 语法。您不能在另一个方法声明中声明一个方法。

如果您想编写可以跳出的循环代码,您可以在线程之外声明一个volatilehttp://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html )布尔变量,并检查它在线程内部的值。您的线程只会循环检查其值的变量,然后在它更改时中断。

也就是说,您似乎正在尝试编写使用MediaPlayer来播放音乐的代码。您应该为此使用服务,而不是线程。

请参阅开发者指南:http: //developer.android.com/guide/topics/media/mediaplayer.html#mpandservices

于 2013-03-10T07:44:42.203 回答