私は、スレッドがカウントしてボタンのテキストを変更し、それらを無効にするアプリケーションを開発しています。私はウォン()メソッドを実行している間にスレッドによって引き起こされるエラーを取得している、私はスレッドがボタンのテキストの変更を処理できないと思う。 UIスレッドまたはそれを処理できるスレッドにどのように渡すことができますか?Androidスレッドの例外
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.util.concurrent.TimeUnit;
public class vTap extends AppCompatActivity {
int level = 0, i = 0, j = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pll();
}
public void pll(){
Thread t = new Thread(){
public void run(){
while(won()){
i++;
try{
sleep(50);
}
catch (InterruptedException e){
}
}
}
};
t.start();
}
public boolean won(){
if(i == 20 || j == 20){
((Button)findViewById(R.id.p1)).setEnabled(false);
((Button)findViewById(R.id.p2)).setEnabled(false);
if(i == 20){
((Button) findViewById(R.id.p2)).setText("You\nLost");
((Button) findViewById(R.id.p1)).setText("Com\nWon");
} else {
((Button) findViewById(R.id.p2)).setText("You\nWon");
((Button) findViewById(R.id.p1)).setText("Com\nLost");
}
return false;
}
else
return true;
}
}
エラーが表示されるアプリケーションがクラッシュしています。
E/AndroidRuntime: FATAL EXCEPTION: Thread-19
Process: com.example.k.tap, PID: 30778
android.util.AndroidRuntimeException: Animators may only be run on Looper threads
at android.animation.AnimatorSet.start(AnimatorSet.java:705)
at android.animation.AnimatorSet.start(AnimatorSet.java:684)
at android.animation.StateListAnimator.start(StateListAnimator.java:188)
at android.animation.StateListAnimator.setState(StateListAnimator.java:181)
at android.view.View.drawableStateChanged(View.java:20049)
at android.widget.TextView.drawableStateChanged(TextView.java:5000)
at android.support.v7.widget.AppCompatButton.drawableStateChanged(AppCompatButton.java:155)
at android.view.View.refreshDrawableState(View.java:20104)
at android.view.View.setEnabled(View.java:9448)
at android.widget.TextView.setEnabled(TextView.java:2196)
at com.example.k.tap.vTap20.won(vTap.java:111)
at com.example.k.tap.vTap20$1.run(vTap.java:44)
D/AppTracker: App Event: crash
D/AppTracker: App Event: stop
他のスレッドでそれをやろうとすると、メインスレッドのビューを変更/変更できます。アンドロイドは例外をスローします。 –