public class BubblesTwo extends Activity {
    /** Called when the activity is first created. */ private HandlerThread bubblesThread=new HandlerThread("BubblesThread");
private MyHandler myHandler;
private Button btn;
//private BubbleImageView iv1,iv2;
private Message msg;
private int x=128,y=350;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn=(Button)findViewById(R.id.btn);
        bubblesThread.start();
        myHandler=new MyHandler(bubblesThread.getLooper());
        msg=myHandler.obtainMessage();
       //用于控制泡泡数量
        msg.arg1=0;
        //用于控制泡泡路线
        msg.arg2=0;
         //msg.sendToTarget();
        btn.setOnClickListener(new btnListenner());
    }
    
    class btnListenner implements OnClickListener{ @Override
public void onClick(View v) {
// TODO Auto-generated method stub
msg.arg1=msg.arg1+1;
msg.sendToTarget();
}
    
    }
    class MyHandler extends Handler{
     ImageView iv1=(ImageView)findViewById(R.id.myImageView1),iv2=(ImageView)findViewById(R.id.myImageView2);
int x=128,y=350;
 
public MyHandler(){

}
public MyHandler(Looper looper){
super(looper);
}
@SuppressWarnings("deprecation")
@Override
public void handleMessage(Message msg) {

Log.i("JSY", "New Thread");

      //  iv1.setLayoutParams ( new AbsoluteLayout.LayoutParams (64,64,x,y) );
     //   iv2.setLayoutParams ( new AbsoluteLayout.LayoutParams (64,64,x,y) );

switch (msg.arg1)

 case 1: {
 iv1.setVisibility(View.VISIBLE);//错误在这里
 Log.i("JSY", "34");
 break;
 
 }
 case 2:{
 iv1.setVisibility(View.INVISIBLE);
 iv2.setVisibility(View.VISIBLE);break;
 }  
 case 3:
 case 4:
 case 5:
 case 6:
 case 0:{
  
 }
 
}
switch (msg.arg2)
{case 0: 
 case 1:
 case 2:
 case 3:
 case 4:
 case 5:
 case 6:
}

}

    }

}
错误信息如下

解决方案 »

  1.   

    bubblesThread=new HandlerThread("BubblesThread");
    放在onCreate里
      

  2.   

    myHandler=new MyHandler(Looper.getMainLooper());你把线程的Looper传给MyHandler那么handleMessage处理就是在线程中处理,你在线程中更新UI那就错了。
    你可以打印下Thread.currentThread().getId()线程ID,你更新UI是在线程中进行的。
      

  3.   

    没看代码  一看异常就知道你在非main线程里动界面了   只有main线程可以动界面  其他线程都是非法的
      

  4.   

    我是handle了两次。解决的这个问题