如何用java语言设计一个聊天窗口的?

解决方案 »

  1.   

    是设计窗口还是设计程序
    窗口的话,直接把几个文本框和按钮排列好就可以了程序的话,就要设计服务器端和客户端,建立socket连接,并写相应的程序你可以网上下载一个程序看看
      

  2.   

    首先建立三个类:第一个类是服务器类:即server;第二个类是:client;和一个发送类:sender;
    具体代码如下:这是server类:
    package demo;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.net.*;
    import java.io.*;
    public class Server extends JFrame implements Runnable{
      JPanel panel;
      JButton button;
      JTextField textField;
      JTextArea textArea;
      ServerSocket serverSocket;
      Socket socket;
      Sender sender;  public Server(){
        panel=new JPanel();
        button=new JButton("Send");
        textField=new JTextField(20);
        textArea=new JTextArea(20,30);
        panel.add(textArea);
        panel.add(textField);
        panel.add(button);
        button.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent e){
        sender.GetString(textField.getText());
        }
       });    this.getContentPane().add(panel);
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setSize(400,500);
        this.setLocationRelativeTo(null);
        this.show();
        Thread th=new Thread(this);
        th.start();
      }
      public static void main(String[] args) {
        Server server=new Server();
      }  public void run() {
       try {
         textArea.append(" waiting connection..."+"\n");
         serverSocket = new ServerSocket(6666);
         socket=serverSocket.accept();
         textArea.append("connection success..."+"\n");
         //System.out.println("dskldk");
         BufferedReader in=new BufferedReader(
         new InputStreamReader(socket.getInputStream()));
         PrintWriter out=new PrintWriter(
         new OutputStreamWriter(socket.getOutputStream()));
          sender=new Sender(out);
         while(true){
           String str=in.readLine();
           textArea.append("Client Say:"+str+"\n");
         }
       }
       catch (Exception ex) {
         ex.printStackTrace();
       }
     }
    }
    这是client类:
    package demo;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.io.*;
    public class Client extends JFrame implements Runnable{
      JPanel panel;
      JButton button;
      JTextField textField;
      JTextArea textArea;
      ServerSocket serverSocket;
      Socket socket;
      Sender sender;
      public Client(){
        panel=new JPanel();
        button=new JButton("Sender");
        textArea=new JTextArea(20,30);
        textField=new JTextField(20);
        panel.add(textArea);
        panel.add(textField);
        panel.add(button);
        button.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
          sender.GetString(textField.getText());
        }
        });
        this.getContentPane().add(panel);
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setSize(400,500);
        this.setLocationRelativeTo(null);
        this.show();
        Thread th=new Thread(this);
        th.start();  }
      public static void main(String[] args) {
      Client client=new Client();
      }  public void run() {
        try {
          socket = new Socket("127.0.0.1", 6666);
          textArea.append("connecting success....."+"\n");
          BufferedReader in =new BufferedReader(new InputStreamReader(socket.getInputStream()));
          PrintWriter out=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
          sender=new Sender(out);      while(true){
            String str=in.readLine();
            textArea.append("Server Say:"+str+"\n");
          }
        }
        catch (IOException ex) {
          ex.getStackTrace();
        }
      }
    }
    这是sender类
    package demo;
    import java.io.*;
    public class Sender extends Thread{
      PrintWriter out;
      String message;
      public Sender(PrintWriter out){
        this.out =out;
        this.start();
      }
      public synchronized void run(){
        while(true){
          if(message==null){
            try {
              this.wait();
            }
            catch (InterruptedException ex) {
            }
          }
         out.println(message);
         out.flush();
         message = null;
        }
      }
     public synchronized void GetString(String message){
       this.message=message;
       this.notify();
     }
    }
    先运行server,在运行client就可以了....
      

  3.   

    就要个聊天窗口的话FieldText和FieldArea就可以了
      

  4.   

    http://topic.csdn.net/u/20080526/15/ffb2f9ba-41c6-46d5-9a24-4f8d2bb2f24d.html
    的5楼这是一个聊天窗口