2017-05-08 8 views
-2

私はJavaプログラミングにはとても新しいので、スレッドのwhileループに問題があります。ここでは、whileループを使用する例を紹介します。スレッドでアプリケーションがクラッシュする

public class MainActivity extends AppCompatActivity { 

private boolean running = true; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final TextView text = (TextView)findViewById(R.id.textView); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      while (running) { 

       try{Thread.sleep(1000);} 
       catch(InterruptedException e){} 

       running = false; 
       text.setText("false!"); 

       running = true; 

       try{Thread.sleep(1000);} 
       catch(InterruptedException e){} 

       text.setText("True!"); 
      } 
     } 
    }).start(); 
} 
} 

実行をfalseに設定すると、スレッドは実行されず、アプリケーションには何も表示されません。実行がtrueに設定されていると、アプリケーションは の後にクラッシュします。text.setText( "false!");

ありがとうございました!あなたがスレッドからのTextViewにアクセスすることはできません

+1

メインスレッドからビューオブジェクトを変更することができます。それは、UIスレッドの外にUIを更新することはできませんあなたに言う必要があります – AxelH

+0

logcatを見て、stacktraceを投稿 – Jens

+0

この回答(http://stackoverflow.com/a/5185140/4391450)は最も簡単です – AxelH

答えて

0

、あなただけの例外メッセージを読んで(とあまりにもあなたの質問にそれを投稿)

+0

オブジェクトは最終的です。 –

+0

にアクセスすることはできますが、メインスレッドではなくスレッドからguiオブジェクトを変更することはできません。 – Reflection

+0

@ cricket_007 TextViewが最終版であっても、バックグラウンドや他のスレッドではアクセスできません。 mainThreadでUIを更新する必要があります。ここでActivity.runOnUIThreadを代わりに使用できます。またはハンドラ – YashikaK

関連する問題