www.pudn.com > ChatRoomClient.rar > ChatRoomClient.java


package chatclient; 
//ChatRoomClient 
 
 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.net.*; 
 
public class ChatRoomClient extends Frame implements Runnable{ 
 Panel panel1,panel2; 
 Button button1,button2; 
 TextField textField1,textField2; 
 Label label1; 
 TextArea textArea; 
 ScrollPane sPanel; 
 //net 
 PrintWriter out; 
 BufferedReader in=null; 
 Socket sock; 
 public final static int DEFAULT_PORT=6666;  
  
 //create Thread to Read information from Server 
 Thread readThread; 
 boolean isTrue=true;//thread can go on runing ?? 
  
 public ChatRoomClient(){ 
  try{ 
   jbInit(); 
  }catch(Exception e){ 
   e.printStackTrace(); 
  } 
 } 
  
 public static void main(String[] args){ // main method 
  ChatRoomClient c=new ChatRoomClient(); 
  c.show(); 
 } 
  
 private void jbInit(){//should set size,position and Font of every component 
   
  button1=new Button("连接");// set Font  
  button2=new Button("发送"); 
  textField1=new TextField("input Server address here!"); 
  textField2=new TextField("input Message here and send to server"); 
  label1=new Label("消息:"); 
  panel1=new Panel(); 
  panel2=new Panel(); 
  sPanel=new ScrollPane(); 
  textArea=new TextArea(); 
   
  //panel1   
  //press button1: 连接 to connect the client to server 
  button1.addActionListener(new java.awt.event.ActionListener(){ 
   public void actionPerformed(ActionEvent e){ 
    button1_actionPerformed(e); 
   } 
  }); 
  //textField1:for input the address of server;be registered to KeyListener. 
  //press key:Enter to connect the client to server 
  textField1.addKeyListener(new textField1_KeyAdapter(this));//java.awt.event.KeyAdapter() 
  panel1.add(button1); 
  panel1.add(textField1); 
   
  //sPanel  ScrollPane 
  sPanel.add(textArea); 
   
  //panel2 
  //press button2: 发送 to send message 
  button2.addActionListener(new java.awt.event.ActionListener(){ 
   public void actionPerformed(ActionEvent e){ 
    button2_actionPerformed(e); 
   } 
  }); 
  //textField2:for input message;be registered to KeyListener. 
  //press key:Enter to send message 
  textField2.addKeyListener(new textField2_KeyAdapter(this)); 
  panel2.add(label1); 
  panel2.add(textField2); 
  panel2.add(button2); 
   
  //frame 
  this.addWindowListener(new ChatFrame_WindowAdapter(this));//frame is registered to WindowListener 
  this.setLayout(new BorderLayout()); 
  this.setSize(500,400); 
  this.add(panel1,BorderLayout.NORTH); 
  this.add(sPanel,BorderLayout.CENTER); 
  this.add(panel2,BorderLayout.SOUTH); 
  //this.show() 
     
 } 
   
 public void startConnect(){//开始连接 
  try{ 
   sock=new Socket(textField1.getText(),DEFAULT_PORT); 
   if(sock!=null){//connection successed 
    processMsg("Connect successfully!"); 
   } 
   in=new BufferedReader(new InputStreamReader(sock.getInputStream())); 
   out=new PrintWriter(sock.getOutputStream()); 
  }catch(IOException ex){ 
   processMsg(ex.toString()); 
   processMsg("Connect failed!"); 
  } 
   
  readThread=new Thread(this); 
  readThread.start();  
 } 
  
 //public void endConnect(){//close IOstream  
  
 public void sendInformation(){ 
  out.println(textField2.getText()); 
  out.flush(); 
   
 } 
  
 private void button1_actionPerformed(ActionEvent e){//连接按钮 
  startConnect(); 
 } 
    
 private void button2_actionPerformed(ActionEvent e){//发送按钮 
  sendInformation(); 
 } 
    
 public void stopRun(){//to stop the running thread 
  isTrue=false; 
 }  
    
 public void processMsg(String msg){//客户端处理消息 
  textArea.append(msg); 
  textArea.append("\n"); 
 } 
  
 public void run(){ 
  String msg; 
  isTrue=true; 
  while(isTrue){ 
   try{ 
    msg=in.readLine(); 
    if(msg.equals("Server exit!")){//server exit 
     processMsg(msg); 
     stopRun();//终止线程 
    }else if(msg!=null){ 
     processMsg(msg); 
    } 
    Thread.sleep(1000);     
   }catch(IOException e){ 
    processMsg(e.toString()); 
   }catch(InterruptedException ei){ 
    processMsg(ei.toString()); 
   } 
  } 
  //endConnect(); 
  try{//服务器退出关闭连接和相关的"流" 
   sock.close(); 
   in.close(); 
   out.close(); 
  }catch(IOException ioe){}  
 } 
  
 public void exit(){//窗口关闭;如果有连接则关闭连接和相关的"流" 
  try{//send "Client exit!" to Server! 
   out.println("Client exit!"); 
   out.flush(); 
  }catch(Exception exc){} 
  //endConnect(); 
  try{//close IOstream  
   sock.close(); 
   in.close(); 
   out.close(); 
  }catch(IOException ioe){} 
  finally{  
   System.exit(0); 
  } 
 } 
} 
 
//文本筐textField1的键击事件适配器 
class textField1_KeyAdapter extends java.awt.event.KeyAdapter{ 
 ChatRoomClient chatFrame; 
  
 public textField1_KeyAdapter(ChatRoomClient chatFrame){ 
  this.chatFrame=chatFrame; 
 } 
  
 public void keyPressed(KeyEvent e){//输入的是enter,开始连接! 
  int j=e.getKeyCode(); 
  if(j==e.VK_ENTER){ 
   chatFrame.startConnect(); 
  } 
 } 
} 
 
//文本筐textField2的键击事件适配器 
class textField2_KeyAdapter extends java.awt.event.KeyAdapter{ 
 ChatRoomClient chatFrame; 
  
 public textField2_KeyAdapter(ChatRoomClient chatFrame){ 
  this.chatFrame=chatFrame; 
 } 
  
 public void keyPressed(KeyEvent e){//键击Enter键,发送信息! 
  int j=e.getKeyCode(); 
  if(j==e.VK_ENTER){ 
   chatFrame.sendInformation(); 
  } 
 } 
} 
 
//窗口关闭事件适配器 
class ChatFrame_WindowAdapter extends java.awt.event.WindowAdapter{ 
 ChatRoomClient chatFrame; 
 public ChatFrame_WindowAdapter(ChatRoomClient chatFrame){ 
  this.chatFrame=chatFrame; 
 } 
 public void windowClosing(WindowEvent e){//exit program 
  chatFrame.exit();//reference to the method exit() in ChatRoomClient. 
 } 
}