pc125864418
2011-03-17 16:47
浏览 265
已采纳

我的这个程序在没有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());
        }
    }
};
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • zgy52188 2011-03-18 12:42
    已采纳

    [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]

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 徐杪杪 2011-03-17 17:21

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

    评论
    解决 无用
    打赏 举报
  • zgy52188 2011-03-18 09:35

    你把这段代码:
    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]

    评论
    解决 无用
    打赏 举报
  • zgy52188 2011-03-18 11:24

    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()就会报错,这也验证了你的报错信息。
    这都我看你给的分析的,不一定准。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题