0

何らかの理由で、thread.start メソッドの終了後にプログラムがクラッシュします。Thread を使用するのはこれが初めてなので、完全に道に迷っており、何が起こっているのか見当もつきません。

    public void countingDown() {

waitingTime = (long) (Math.random() * 1000 + 3000);
button.setText("Wait");
try {
    Thread.sleep(waitingTime);
} catch (Exception e) {
}
time1 = System.currentTimeMillis();
button.setText("Press");}

そしてトレッドを呼び出します:

new Thread(new Runnable() {

                    @Override
                    public void run() {
                        countingDown();
                    }
                }).start();

本当に感謝しています!

私のlogCatは次のように表示されます(混乱して申し訳ありません):

10-22 14:59:43.319: E/AndroidRuntime(961): FATAL EXCEPTION: Thread-81 10-22 14:59:43.319: E/AndroidRuntime(961): android.view.ViewRootImpl$CalledFromWrongThreadException: 元のスレッドのみビュー階層を作成したものは、そのビューに触れることができます。10-22 14:59:43.319: E/AndroidRuntime(961): android.view.ViewRootImpl.checkThread(ViewRootImpl.java:5908) で 10-22 14:59:43.319: E/AndroidRuntime(961): Android で。 view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:869) 10-22 14:59:43.319: E/AndroidRuntime(961): android.view.ViewGroup.invalidateChild(ViewGroup.java:4253) 10-22 14:59: 43.319: E/AndroidRuntime(961): android.view.View.invalidate(View.java:10539) 10-22 14:59:43.319: E/AndroidRuntime(961): android.view.View.invalidate(View) で.java:10494) 10-22 14:59:43.319: E/AndroidRuntime(961): android.widget.TextView で。

4

1 に答える 1

4

button.setText()メイン (UI) スレッドではないスレッドでUI 操作 ( ) を実行しています。Handlerそれを達成するにはorが必要です - それらと「メインスレッドにない」もの全体の詳細については、これAsyncTaskを読んでください - または少なくとも以下の例のように (変数を機能させるには変数を宣言する必要があります) :runOnUiThread()buttonfinal

public void countingDown() {

    waitingTime = (long) (Math.random() * 1000 + 3000);
    button.setText("Wait");
    try {
        Thread.sleep(waitingTime);
    } catch (Exception e) {
    }

    time1 = System.currentTimeMillis();

    runOnUiThread(new Runnable() {
        public void run() {
            button.setText("Press");
        }
    });
}

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-10-22T19:34:27.697 に答える