服务器程序 
import java.net.*; 
import java.io.*; 
import java.util.*; 


public class ChatServer { 




public static void main(String[] args) { 

ServerSocket ssocket=null; 
Socket socket=null; 
Vector m_thread=new Vector(); 
try{ 
ssocket=new ServerSocket(61119); 


}catch(IOException e){ 
System.out.println("new ServerSocket fail!"); 
return; 

}//创建服务器可能出现错误 
try{ 
int nid=0; 
while(true){ 
    socket=ssocket.accept(); 
    System.out.println("accept"); 
    ServerThread st=new ServerThread(socket,m_thread); 
    st.setID(nid++); 
    m_thread.addElement(st); 
    new Thread(st).start(); 
    for(int i=0;i <m_thread.size();i++){ 
  ServerThread st1=(ServerThread)m_thread.elementAt(i); 
  st1.write("welcome"+st.getID()+"to enter room"); 

  } 
        } 
}catch(Exception e) 

System.out.println("thread is down"); 






class ServerThread implements Runnable{ 
Vector m_thread=null; 
Socket m_socket=null; 
byte b[]=null; 
    InputStream is=null; 
    OutputStream os=null; 
    int n_id; 
    
    public ServerThread(Socket socket,Vector vector) 
    { 
    m_thread=vector; 
    m_socket=socket; 
      try{ 
      is=m_socket.getInputStream(); 
      os=m_socket.getOutputStream(); 
          }catch(IOException e) 
            { 
      System.out.println("error"); 
        } 
          } 
    public void run(){ 
    System.out.println("thread is running"); 
    
    try{ 
    while(true) 
    { 
    is.read(b); 
    String s; 
    s=b.toString(); 
    s=s.trim(); 
    if(s==null) 
    break; 
    
    if(s.equals("leave")) 
    { 
    for(int i=0;i <m_thread.size();i++) 
    { 
    ServerThread st1=(ServerThread)m_thread.elementAt(i); 
    st1.write("***"+st1.getID()+"leave"); 
    
    
    } 
    break; 
    
    
    } 
    else{ 
    for(int i=0;i <m_thread.size();i++) 
        { 
        ServerThread st1=(ServerThread)m_thread.elementAt(i); 
        st1.write("***"+st1.getID()+s); 
        
        
        
        } 
    
    
    } 
    } 

    
    m_thread.remove(this); 
    
    
    }catch(Exception e) 
    { 
    e.printStackTrace(); 
    } 
    
    try{ 
    m_socket.close(); 
    }catch(IOException e) 
    { 
    System.out.println(e); 
    } 
    
    
    } 
    public void write(String sting) 
    {  
    String s=null; 
    synchronized(os){ 
    
        byte b[]=s.getBytes(); 
    try{ 
    os.write(b); 
    }catch(Exception e) 
        { 
    System.out.println(e); 
        } 
    } 
    } 
    public int getID(){ 
    return n_id; 
    
    } 
    public void setID(int nid){ 
      n_id=nid; 
    
    } 
    
    } 
客户端程序import java.applet.*; 
import java.awt.*; 
import java.io.*; 
import java.net.*; 
public class ChatApplet extends Applet implements Runnable { 

        /** 

*/ 
private static final long serialVersionUID = 6750130769544502041L; 
TextArea m_textarea; 
        TextField m_textfield; 
        InputStream is; 
        OutputStream os; 
        public void init(){ 
        setLayout(null); 
        setSize(426,266); 
        m_textarea=new TextArea(10,10); 
        m_textfield=new TextField(); 
        is=null; 
        os=null; 
        try{ 
        
        
        Socket m_socket; 
        System.out.println("server"); 
        m_socket=new Socket("127.0.0.1",61119 
        
      ); 
        is=m_socket.getInputStream(); 
        os=m_socket.getOutputStream(); 
        }catch(Exception e){ 
        System.out.println("error"); 
        System.out.println(e); 
        
        } 
        setLayout(new BorderLayout()); 
        add("Center",m_textarea); 
        add("South",m_textfield); 
        new Thread(this).start(); 
        
        
        } 
        public boolean handleEvent(Event event) 
        { 
                String s=null; 
                byte b[]=null; 
                if((event.target==m_textfield)&&(event.id==Event.ACTION_EVENT)) 
                { 
                
                
                    try{ 
                s=m_textfield.getText(); 
                s=s.trim(); 
                b=s.getBytes(); 
                os.write(b); 
                }catch(IOException e){ 
                System.out.println(e); 
                } 
                return true; 
                } 
                else return  false; 
                
        } 
        public void run(){ 
        
        try{ 
            while(true){ 
        String s=null; 
        byte b[]=null; 
            is.read(b); 
        s=b.toString(); 
        if(s!=null) 
        m_textarea.append(s+"\n"); 
        
            }}catch(Exception e){ 
            m_textarea.append("net problem\n"); 
            m_textfield.setVisible(false); 
            } 
        } 
    
        
        public void stop(){ 
        try{ 
        os.write("leave".getBytes()); 
        }catch(IOException e) 
        { 
        
        } 
        } 


我运行了不行提示 accept 
thread is down 
thread is running 
java.lang.NullPointerException 
at java.net.SocketInputStream.read(Unknown Source) 
at ServerThread.run(ChatServer.java:75) 
at java.lang.Thread.run(Unknown Source)错误.大家帮忙看下 
.另外提个问题 
一个类中的程序修改另一个类中的那数据结构.能修改吗?我只用过在一个类中的为了保持数据用static  m_thread.remove(this); 这client 可是 chatserver 里面的数据.但是这程序能正确运行.不知道为什么能正确 请高手指点弄了好几天了