import java.net.*;
import java.io.*;
public class zy extends Thread 
{
ServerSocket server;
   Socket client =new Socket();
public zy()
{
try{
ServerSocket server=new ServerSocket(88);
}catch(Exception ee){
}
this.start();
System.out.println("start");
}
public void run()
{
try{

while(true)
{
client =server.accept();
Connecton con=new Connecton(client);
}
}catch(Exception e){
System.out.println(e);
}
}
public static void main(String args [])
{
new zy();

    }
 }
 class Connecton extends Thread
 {
  Socket out;
  PrintStream sendMsg;
  BufferedReader getMsg;/*接受消息*/
  public Connecton(Socket client)
  {
  out=client;
  try{
  sendMsg=new PrintStream(out.getOutputStream());
        getMsg=new BufferedReader(new InputStreamReader(out.getInputStream()));
       
  }catch(Exception e){
  return ;
  }
  this.start();
  }
  public void run()
  {
  String message;
  try{
  while((message=getMsg.readLine())!=null)
        {
         sendMsg.println("you send"+message);
         System.out.println("he send"+message);
        }

  }catch(Exception eee){
  System.out.println("ww"+eee);
  try{out.close();
  }catch(Exception w){
  }
  }
  }
 }

解决方案 »

  1.   

    Socket out; 
    PrintStream sendMsg; 
    BufferedReader getMsg;/*接受消息*/ 这样声明不好,这样的话,你只相当于声明了一个引用,而这个引用没有指向具体对象
    那么你再去操作这个引用的话,很容易出现空指针错误的
    声明一个变量时候与其赋予一个初始值是一个良好习惯
      

  2.   

    类似的代码还有你这里
    ServerSocket server; 
      

  3.   

    还有就是你好多catch块中没做异常处理
    比如try{
    ServerSocket server=new ServerSocket(88);
    }catch(Exception ee){

    如果这里有异常那么后面用到server将会出现空指针后面还有几处
      

  4.   

    楼主,正好我做了一个稳定交的多线程,并发框架,开源了,可以参考:
    http://blog.csdn.net/guishuanglin/archive/2008/12/06/3458711.aspx
      

  5.   

    try{
    放你可能出现异常的代码
    }catch
    {
      如果异常,做的处理
    }慢慢调
      

  6.   


    ServerSocket server = new ServerSocket(88);
    这句错了吧!应该是
    server = new ServerSocket();