Androidのシングルスレッドルール
Androidアプリで、新たに別スレッドを生成してそのスレッドからウィジェットを更新しようとしたら、android.view.ViewRoot$CalledFromWrongThreadexception なんて例外が発生した。
UIにアクセスできるのはそれ専用のスレッドがあるから、別スレッドからアクセスしちゃダメよってことらしい。 view#post(Runnable r) メソッドを使ってUIを更新しろってことで、実装をそのように変更した。
元のコード
button.setEnabled(false);
変更後のコード
botton.post(new Runnable() { public voir run() { button.setEnabled(false); } });
例外を投げてくれるのは、どこに問題があるのかが簡単に特定できるから分かりやすいよね。swingもこうしてくれれば、デッドロックで悩むこともなくてすんだのに。