0

特定のスレッドについて、次のコードがあります

public void run() {

    while (true) {
        currentWord = words.get(new Random().nextInt(words.size()));
        tvForeignWord.setText(currentWord.getWordForeign());
        tvScore.setText("Your score is " + score);
        for (int i = timer_length; i > 0; i--) {
            tvTimer.setText("You have " + i + " seconds remaining.");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                //DEBUG e.printStackTrace();
            }
        }
    }
}

ただし、次のエラー メッセージが表示されるようです。

02-19 22:03:38.950: E/AndroidRuntime(17236): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

どうした?

代わりにこれを行うと:

public void run() {

    //while (true) {
        currentWord = words.get(new Random().nextInt(words.size()));
        tvForeignWord.setText(currentWord.getWordForeign());
        tvScore.setText("Your score is " + score);
        //for (int i = timer_length; i > 0; i--) {
            //tvTimer.setText("You have " + i + " seconds remaining.");
            //try {
                //Thread.sleep(1000);
            //} catch (InterruptedException e) {
                //DEBUG e.printStackTrace();
            //}
        //}
    }

エラーが出ませんか?

4

2 に答える 2

1

別のスレッドから UI を更新しないでください。スレッドの外側に Handler オブジェクトを作成してそこにランナブルをポストするか、 context.runOnUiThread() を使用してメイン スレッドで UI 操作を実行してみてください。

于 2013-02-19T22:20:48.340 に答える
0

UI オブジェクトを操作できるのは、UI スレッドだけです。ワーカー スレッドが画面に変更を加えるには、UI スレッドとワーカー スレッド間のメッセージングをセットアップする必要があります。

于 2013-02-19T22:08:31.677 に答える