2012-06-26 53 views
0
package your.splash.namespace; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.widget.TextView; 

public class SplashScreenActivity extends Activity{ 

protected boolean _active = true; 
protected int _splashTime=1500; //The timeout 
TextView tv; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    tv=(TextView) findViewById(R.id.stext); 

    Thread splashThread = new Thread() 
    { 
     @Override 
     public void run() 
     { 
      try 
      { 
       int waited=0; 

         //the thread will stop if _active==false and bigger than _splashTime 
       while(_active && (waited < _splashTime)) 
       { 
        sleep(100); 

        if(_active) 
        { 
         waited +=100; 
        } 
       } 
      }catch(InterruptedException e) 
      { 

      } 
      finally 
      { 
       tv.setText("how"); //when it is timeout, the text will change to this one 
      } 
     } 


    }; 

    splashThread.start(); 
} 

//When user press screen, it set _active to false to stop the thread 
public boolean onTouchEvent(MotionEvent event) 
{ 
    if(event.getAction()==MotionEvent.ACTION_DOWN) 
    { 
     _active = false; 
    } 

    return true; 
} 
} 

我只想在线程超时时设置文本“如何”到TextView。该程序可以在Eclipse中运行。但是,当线程超时时,弹出错误消息“不幸的是,SplashScreen已经停止”出现,然后按下OK按钮后程序退出(停止)。哪里不对?怎么修?Android线程错误消息

回答

1
tv.setText("how"); is in onon UI thread... 

你不能做UI在其他然后UI线程相关的工作......

finally 
      { 


runOnUiThread(new Runnable() { 
    public void run() { 
     tv.setText("how"); 
    } 
}); 

}