2017-05-08 157 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!”);

谢谢大家提前!

+1

阅读异常消息(并将其发布到您的问题中)。它应该告诉你,你不能更新UI线程之外的用户界面 – AxelH

+0

看看logcat并发布堆栈跟踪 – Jens

+0

这个[answer](http://stackoverflow.com/a/5185140/4391450)是最简单的使用 – AxelH

回答

0

您无法从线程访问textView,只能从主线程更改视图对象

+0

该对象是最终的。它可以访问 –

+0

它没关系,你不能改变线程而不是主线程的GUI对象。 – Reflection

+0

@ cricket_007即使TextView是最终的,我们也无法在后台或其他线程上访问它。 UI必须在mainThread上更新。这里我们可以使用Activity.runOnUIThread来代替。或处理程序 – YashikaK

相关问题