空指针异常无法修复

时间:2012-02-24 06:00:18

标签: java android nullpointerexception

我连续得到一个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);
              }


}

}

2 个答案:

答案 0 :(得分:3)

您在哪里初始化 out 变量... null ,因此您在out.println("CLOSE");

获取nullpointerException

答案 1 :(得分:0)

使用BufferedWriter初始化。

out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);