-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 に答える