我的这个程序在没有Button监听的时候没有出错 可是加上了一个Button监听就不能运行了是为什么啊?

问题在b1上 去掉b1的监听就能运行,可是加上监听就不能运行了。。谁能帮我看看~
public static final String host = "10.10.9.132";
public static final int SERVERPORT = 10000;
Thread th = null;
Socket s = null;
BufferedReader br = null;
PrintWriter pw = null;
private EditText et1 = null;
private EditText et2 = null;
String str1 = "";
private Button b1 = null;
private Button b2 = null;
private Button b3 = null;
private Button b4 = null;
//private Runnable mRunnable;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    b1 = (Button)findViewById(R.id.button1);
    b2 = (Button)findViewById(R.id.button2);
    b3 = (Button)findViewById(R.id.button3);
    b4 = (Button)findViewById(R.id.button4);
    et1 = (EditText)findViewById(R.id.editText1);
    et2 = (EditText)findViewById(R.id.editText2);

b1.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){

try {
s= new Socket(host,SERVERPORT);
pw = new PrintWriter(s.getOutputStream(),true);
br = new BufferedReader(new InputStreamReader(s.getInputStream()));

    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {

        e.printStackTrace();
    }
                    } 
    });
    //发送消息。。
    b2.setOnClickListener(new OnClickListener(){
        public void onClick(View v){
            try{
            //取得编辑框中输入的消息。。
            String str = et2.getText().toString() +"/n";
            et2.setText("");
            //发送给服务器。。
            pw.print(str);
            pw.flush();
        }catch (Exception e){
            Log.e(DEBUG_TAG,e.toString());
        }   
    }
    });
    b3.setOnClickListener(new OnClickListener(){

        public void onClick(View v) {
            // TODO Auto-generated methd stub
        String ss = "button33333";
        pw.print(ss);
        pw.flush();
        }

    });


     th = new Thread(mRunnable);
    th.start();
}
//监听服务器发来的消息。。
private Runnable mRunnable = new Runnable()
{
    public void run() 
    {
        while (true){

            try {
                if ((str1 = br.readLine()) != null)
                {//消息换行。。
            str1 += "/n";
            mHandler.sendMessage(mHandler.obtainMessage());
                }//发送消息。。
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
};
Handler mHandler =new Handler(){
    public void handleMessage(Message msg){
        //刷新
        super.handleMessage(msg);
        try
        {
            //将聊天记录添加进来
            et1.append(str1);
        }catch(Exception e){
            Log.e(DEBUG_TAG,e.toString());
        }
    }
};

[quote]想把if ((str1 = br.readLine()) != null)拿出来放到b1里;[/quote]
我想这个不是放在哪的问题,你的br是全局的变量,无论放到哪个方法中就是可以的。
但这不是原因所在,原因还在流上。
[code="java"]
s= new Socket(host,SERVERPORT);
pw = new PrintWriter(s.getOutputStream(),true);
br = new BufferedReader(new InputStreamReader(s.getInputStream()));[/code]

提供点儿异常信息出来呀 ?
还是什么反应都没有呢?

你把这段代码:
b1.setOnClickListener(new Button.OnClickListener(){ }
改成和你下面的一样(new OnClickListener())
要么就改成:
b1.setOnClickListener(new View.OnClickListener(){ };
下面是API,好像没有直接写Button.OnClickListener。
[code="java"]public class MyActivity extends Activity {
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);

     setContentView(R.layout.content_layout_id);

     final Button button = (Button) findViewById(R.id.button_id);
     button.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
             // Perform action on click
         }
     });
 }

}[/code]

java.lang.NullPointerException
很明显报的是空指针异常。
第二条at parse.test.inter$1.run(inter.java:139) 指明了错误的信息出处
在inter类的139行。
第三行就是出错代码在的方法中。你上面贴的代码太乱,根本分不清也不知道139行是什么位置。
我想应该是在Runnable的run方法中。
在通过你说的b1监听的报错,应该是错误在
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
如果br是没有得到数据的话,那么在线程run方法中的
if ((str1 = br.readLine()) != null) 就应该是不成立的。
br.readLine()就会报错,这也验证了你的报错信息。
这都我看你给的分析的,不一定准。