谁能帮我看看这个程序那里有错么!总是出现java.lang.NullPointerException错误import java.io.*;
import java.net.*;
public class ServerClient 
{
public ServerClient(int port)
{
Server server=new Server(port);
server.start();
Client client=new Client(port);
client.start();
}
public static void main(String args[])
{
new ServerClient(7777);
}
}
class Server extends Thread
{
int port;
ServerSocket server;
Socket socket;
DataOutputStream outStream=null;
DataInputStream inStream=null;
public Server (int port)
{
try
{
this.port=port;
server=new ServerSocket(port);
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
public void run()
{
try
{
socket=server.accept();
outStream=new DataOutputStream(socket.getOutputStream());
inStream=new DataInputStream(socket.getInputStream());
System.out.println("server is ok,please continue");
while(true)
{
String str=inStream.readUTF();
System.out.println("The server receive String:"+str);
outStream.writeUTF(str);
}
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}
class Client extends Thread
{
int port;
Socket socket;
DataInputStream inStream=null;
DataOutputStream outStream=null;
public Client(int port)
{
try
{
this.port=port;
socket=new Socket(InetAddress.getLocalHost(),port);
inStream=new DataInputStream(socket.getInputStream());
System.out.println("client is ok,please continue!");
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
public void run()
{
try 
        { 
            while(true) 
            { 
             System.out.println("qingshuru");
        byte[] b=new byte[1024];
                String str="1"; 
                //从键盘读取字符串
                int m=System.in.read(b); 
        str=new String(b,0,0,m-1);
                //向服务器发送信息
                outStream.writeUTF(str); 
                //从服务器读取信息
                str=inStream.readUTF(); 
        System.out.println("The client receive String:"+str);
            } 
        } 
    catch(Exception e)
        { 
      System.out.println(e.toString());
        }  }
}

解决方案 »

  1.   

    在Client类的构造方法里面,要将outStream 变量初始化public Client(int port)
    {
    try
    {
    this.port = port;
    socket = new Socket(InetAddress.getLocalHost(), port);
    inStream = new DataInputStream(socket.getInputStream());
    outStream = new DataOutputStream(socket.getOutputStream());
    //若outStream 不初始化,后面的程序对它的调用肯定会报空指针异常了
    System.out.println("client is ok,please continue!");
    } catch (Exception e)
    {
    e.printStackTrace();
    }
    }另外还有一个建议,在异常捕捉的时候,用e.printStackTrace();能很好的根据错误堆栈找到错误的地方