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