0

2 つのスレッドがあり、そのうちの 1 つはボタンを押すと開始されます。ボタンに 1 ~ 20 の値を表示するだけbtn.settext(""+ j)です。そのボタンのリスナー内に、次のように記述しました。

btn_listener.setOnClickLstener(new Listener) {
    public void onClickListener(view v) {
        if (!t2.isAlive()) {
            t2.start()
        }
    }
}

t2 はスレッドです。実行時に何が起こるかというと、スレッド 2 の実行中にボタンをクリックしても何も起こりませんが、スレッド 2 がジョブを終了してボタンをクリックするとアプリがクラッシュします。それが起こる理由は何ですか?

4

1 に答える 1

3

スレッドを再開できません。

Kathy SierraによるSCJPによると:

スレッドでメソッドを呼び出した後は、start()再起動できません。それは完了するまで実行され、その後溶解し、死んでいると見なされます (その特定のメソッドを呼び出すことはできますが、start() を再度呼び出すことはできません)。

2 回目に呼び出すとstart()、例外 ( でIllegalThreadStateExceptionあるRuntimeException) が発生します。

于 2014-11-29T13:05:58.407 に答える