我连续得到一个nullpointer异常,但我无法弄清问题在哪里。 请帮忙。 它是android上的客户端的java代码。我试图同时发送和接收数据,但它无法正常工作。 <
package com.chat.clientone;
import android.app.Activity;
import android.os.Bundle;
import java.io.*;
import java.net.*;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.KeyEvent;
import android.widget.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import android.text.Html;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
import android.util.*;
public class ClientoneActivity extends Activity {
public static final String SERVER_HOSTNAME = "10.0.2.2";
public static final int SERVER_PORT = 3000;
private TextView tv=null;
private EditText et=null;
private Button bt=null;
private Socket socket;
BufferedReader in=null;
PrintWriter out=null;
String messageOut=null, messageIn=null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.clienttext);
et=(EditText)findViewById(R.id.clientedit);
bt=(Button)findViewById(R.id.cbtn);
try {
socket = new Socket(SERVER_HOSTNAME, SERVER_PORT);
tv.append("Connected to server " +
SERVER_HOSTNAME + ":" + SERVER_PORT);
et.append("Enter Username");
}catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
tv.append("NOTE: Enter 'quit' to end the program.\n");
while (true) {
//System.out.print("SEND: ");
messageOut = et.getText().toString()+System.getProperty("line.separator");
Log.e("LOG_TAG", "ERRRRRRRROOORRR"+messageOut);
if (messageOut.equalsIgnoreCase("quit")) {
// User wants to quit. Inform the other side
// of the connection, then close the connection.
out.println("CLOSE");
out.flush();
// connection.close();
tv.append("Connection closed.");
// finish();
System.exit(0);
break;
}
out.println(messageOut);
out.flush();
if (out.checkError()) {
throw new IOException("Error occurred while transmitting message.");
}
tv.append("WAITING...");
messageIn = in.readLine();
if (messageIn.length() > 0) {
// The first character of the message is a command. If
// the command is CLOSE, then the connection is closed.
// Otherwise, remove the command character from the
// message and procede.
if (messageIn.equalsIgnoreCase("CLOSE")) {
tv.append("Connection closed at other end.");
// connection.close();
// finish();
System.exit(0);
break;
}
}
tv.append("RECEIVED: " + messageIn);
}
}
catch (Exception e) {
tv.append("Sorry, an error has occurred. Connection lost.");
tv.append(e.toString());
System.out.println(e);
Log.e("LOG_TAG", "ERRRRRRRROOORRR"+e.toString());
System.exit(1);
}
}
}
答案 0 :(得分:3)
您在哪里初始化 out 变量... null ,因此您在out.println("CLOSE");
答案 1 :(得分:0)
使用BufferedWriter初始化。
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);