2 个类
import java.io.*;
//import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
public class ChatClient {
 public static void main(String[] args)
        {
         ChatClient cc=new ChatClient();
         cc.receive();
        }  
    JTextField jtf;
    JTextArea  jta;
    Socket s;
    PrintWriter out;
    BufferedReader in;
    public ChatClient(){
     JFrame frame = new JFrame("ChatClient");
     frame.setSize(400,300);
     jta = new JTextArea();
     jta.setEditable(false);
     jtf.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent arg){
     send();
      }
     });
     frame.getContentPane().add(new JScrollPane(jta));
     frame.getContentPane().add(jtf,"south");
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setVisible(true);
    
     try{
     s = new Socket("127.0.0.1",3000);
     in = new BufferedReader(new InputStreamReader(s.getInputStream()));
     out = new PrintWriter(s.getOutputStream());
     }catch (UnknownHostException e){
     e.printStackTrace();
     }catch (IOException e){
     e.printStackTrace();
     }
    }
    
    public void receive(){
     while(true){
     try{
      String text =in.readLine();
      this.jta.append(text + "\n");
     }catch (IOException e){
         e.printStackTrace();
         return;
         }
     }
    }
    
    public void send(){
     String text = this.jtf.getText();
     out.println(text);
     out.flush();
    }
}//第2个类
import java.net.*;
import java.io.*;
import java.util.*;
public class ChatServer {
    public static void main(String [ ] args) throws Exception
   {
     ServerSocket ss = new ServerSocket(3000);
        List list = new ArrayList();
        while(true){
         Socket s = ss.accept();
         list.add(s);
         Thread t = new ServerThread(s,list);
         t.start();
        }
    }  
}class ServerThread extends Thread{
Socket s;
List list;
PrintWriter out;
    BufferedReader in;
    
    public ServerThread(Socket s,List list){
     this.s = s;
     this.list = list;
     try {
     in = new BufferedReader(new InputStreamReader(s.getInputStream()));
     out = new PrintWriter(s.getOutputStream()); 
     }catch (IOException e){
     e.printStackTrace();
     }
    }
    
    public void run(){
     while(true){
     try{
     String str = in.readLine();
     if(str == null)
       return;
     Iterator it = list.iterator();
     while(it.hasNext()){
     Socket socket =(Socket)(it.next());
     PrintWriter o = new PrintWriter(socket.getOutputStream());
     o.println(str);
     o.flush();
     }
     }catch (IOException e){
         e.printStackTrace();
         return;
         }
     }
    }
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【lg5113】截止到2008-07-29 13:10:52的历史汇总数据(不包括此帖):
    发帖的总数量:8                        发帖的总分数:125                      每贴平均分数:15                       
    回帖的总数量:12                       得分贴总数量:3                        回帖的得分率:25%                      
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:8                        未结的总分数:125                      
    结贴的百分比:0.00  %               结分的百分比:0.00  %                  
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    jtf没有实例化
    另外frame.getContentPane().add(jtf,"south");中"south"应为"South",S大写
    综上:public ChatClient() {
    JFrame frame = new JFrame("ChatClient");
    frame.setSize(400, 300);
    jta = new JTextArea();
    jtf = new JTextField();//这里要加
    jta.setEditable(false);
    jtf.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg) {
    send();
    }
    });
    frame.getContentPane().add(new JScrollPane(jta));
    frame.getContentPane().add(jtf, "South");//这里要改
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);...
    ...
    }