0

ギリシャ語で .mp3 単語を聞いて 2000 ミリ秒後に表示するアプリを作成していますが、スレッドを一時停止してから notify() バックスレッドが再び実行されることはありません... TextView は 2000 ミリ秒ごとに変更されますが、一時停止して notify() を実行すると ( )ブロックはもう何も実行されておらず、アプリがクラッシュします..何が間違っていますか?

class MyinnerThread implements Runnable  {
    String name;
    Thread tr;
    boolean suspendFlag;
    int i = 0;

    MyinnerThread(String threadname) {
        name = threadname;
        tr = new Thread(this, name);
        suspendFlag = false;
        tr.start();
    }

    public void run() {

        try {
            while(!suspendFlag){

            runOnUiThread(new Runnable() {
                @Override
                public void run() {

                    if(i == 0){tv1.setText("trhead1");}
                    if(i == 1){tv2.setText("trhead2");}
                    if(i == 2){tv3.setText("trhead3");}
                    if(i == 3){tv4.setText("trhead4");}
                    if(i == 4){tv5.setText("trhead5");}
                    if(i == 5){tv6.setText("trhead6");}
                    if(i == 6){tv7.setText("trhead7");}
                    if(i == 7){tv8.setText("trhead8");}

                    synchronized(signal) {
                        while(suspendFlag) {
                            try {
                                signal.wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            });

            Thread.sleep(2000);
            i++;

           }
        } catch (InterruptedException e) {
            System.out.println(name + " interrupted.");
        }
    }
    void mysuspend() {
        suspendFlag = true;
    }

     void myresume() {

        synchronized(signal) {
            suspendFlag = false;
            signal.notify();
        }

}

}

編集:ここに最終コードがあり、動作しています!

run() {

    try {
        while(true){

         synchronized(signal) {
               while(suspendFlag) {
                     try {
                         signal.wait();
                     } catch (InterruptedException e) {
                         e.printStackTrace();
                     }
                 }

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
              //....
                }
            }
        });

        Thread.sleep(2000);
        i++;
       }
    } 
}

}

4

1 に答える 1