只要将public class chatApplet extends Applet {
改为
public class chatApplet extends JFrame{
再相应改一些代码就行了,比如将init方法改为jbInit方法
如下:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2002</p>
 * <p>Company: </p>
 * @author unascribed
 * @version 1.0
 */public class chatApplet extends JFrame {
  /*以下用于定义UI变量*/
  Panel panel1 = new Panel();        //用于放置输入姓名和连接两个按钮
  BorderLayout borderLayout1 = new BorderLayout();
  Panel panel2 = new Panel();        //用于放置聊天信息显示和聊天人员列表
  Panel panel3 = new Panel();        //用于放置发送信息区域
  FlowLayout flowLayout1 = new FlowLayout();
  FlowLayout flowLayout2 = new FlowLayout();
  Label label1 = new Label();
  TextField name_txt = new TextField(15);
  Button button1 = new Button();
  Button button2 = new Button();
  TextArea chat_txt = new TextArea(15,30);
  Label label2 = new Label();
  Button button3 = new Button();
  TextField msg_txt = new TextField(20);
  java.awt.List list1 = new java.awt.List(13);  /*以下定义数据流和网络变量*/
  Socket soc=null;                   //定义连接套接字
  PrintStream ps=null;//定义打印流
  Listen listen=null;                 //定义一个客户端线程  public chatApplet() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  private void jbInit() throws Exception {
    resize(475,350);
    this.setLayout(borderLayout1);
    panel2.setLayout(flowLayout1);
    panel3.setLayout(flowLayout2);
    label1.setText("姓名:");    button1.setLabel("连接");
    button2.setLabel("断开连接");    chat_txt.setEditable(false);
    panel2.setBackground(Color.cyan);
    panel1.setBackground(Color.cyan);
    label2.setText("聊天信息:");
    button3.setLabel("发送");
    msg_txt.setText("请输入聊天信息");
    panel3.setBackground(Color.cyan);
    this.add(panel1, BorderLayout.NORTH);
    panel1.add(label1, null);
    panel1.add(name_txt, null);
    panel1.add(button1, null);
    panel1.add(button2, null);
    this.add(panel2, BorderLayout.CENTER);
    panel2.add(chat_txt, null);
    panel2.add(list1, null);
    this.add(panel3,  BorderLayout.SOUTH);
    panel3.add(label2, null);
    panel3.add(msg_txt, null);
    panel3.add(button3, null);
  }
  public boolean action(Event evt,Object obj)    //事件触发代码
  {
    if(evt.target instanceof Button)
    {
      String label=(String) obj;
      if(label.equals("连接"))                //如果点击连接后
      {
        if(soc==null)
        {
          try
          {
            soc=new Socket(InetAddress.getLocalHost(),2525);     //使用端口2525实例化一个本地套接字
            System.out.println(soc);                             //在控制台打印实例化的结果
            ps=new PrintStream(soc.getOutputStream());           //将ps指向soc的输出流
            StringBuffer info=new StringBuffer("INFO: ");        //定义一个字符缓冲存储发送信息
            //其中INFO为关键字让服务器识别为连接信息
            //并将name和ip用":"分开,在服务器端将用一个
            //StringTokenizer类来读取数据
            String userinfo=name_txt.getText()+":"+InetAddress.getLocalHost().toString();
            ps.println(info.append(userinfo));            ps.flush();
            listen=new Listen(this,name_txt.getText(),soc);    //将客户端线程实例化
            listen.start();                                    //启动线程
          }
          catch(IOException e)
          {
            System.out.println("Error:"+e);
            disconnect();
          }
        }   //end of if
      }//end of if
      else if(label.equals("断开连接"))                               //如果点击断开连接按钮则运行disconnect()
      {
        disconnect();
      }
      else if(label.equals("发送"))                                 //如果点击发送按钮
      {
        if(soc!=null)
        {
          StringBuffer msg=new StringBuffer("MSG: ");        //定义并实例化一个字符缓冲存储发送的聊天信息
          //其中MSG为关键词
          try
          {
            String msgtxt=new String(msg_txt.getText());
          }
          catch(Exception e){}          ps.println(msg.append(msg_txt.getText()));          //用打印流发送聊天信息
          ps.flush();
        }
      }
    }
    return true;
  }   //end of method action  public void disconnect()                                         //客户端点击断开连接要运行的方法
  {
    if(soc!=null)
    {
      try
      {
        listen.suspend();
        ps.println("QUIT");                                    //用打印流发送QUIT信息通知服务器断开此次通信
        ps.flush();
        soc.close();                                            //关闭套接字
      }
      catch(IOException e)
      {
        System.out.println("Error:"+e);
      }
      finally
      {      }
    }// end of if
  }  class Listen extends Thread       //客户端线程类用来监听服务器传来的信息
  {
    String name=null;                   //用来存储客户端连接后的name信息
    DataInputStream dis=null;          //用来实现客户端接受服务器数据的输入流
    PrintStream ps=null;               //用来实现从客户端发送数据到服务器的打印流
    Socket socket=null;                //用来存储客户端的socket信息
    chatApplet parent=null;             //用来存储当前运行的chatApplet实例    public Listen(chatApplet p,String n,Socket s)   //Listen类的构造器
    {
      //接受参数
      parent=p;
      name=n;
      socket=s;      try
      {
        //实例化两个数据流
        dis=new DataInputStream(s.getInputStream());
        ps=new PrintStream(s.getOutputStream());      }
      catch(IOException e)
      {
        System.out.println("Error:"+e);
        parent.disconnect();
      }
    }   //end of Listen constractor    public void run()                               //线程运行方法
    {
      String msg=null;
      while(true)
      {
        try{msg=dis.readLine();}                 //读取从服务器传来的信息
        catch(IOException e)
        {
          System.out.println("Error:"+e);
          parent.disconnect();
        }
        if (msg==null)                           //如果从服务器传来的信息为空则断开此次连接
        {
          parent.listen=null;
          parent.soc=null;
          parent.list1.clear();
          return;
        }
        StringTokenizer st=new StringTokenizer(msg,":");   //用StringTokenizer类来实现读取分段字符
        String keyword=st.nextToken();                     //读取信息头即关键字用来识别是何种信息        if(keyword.equals("PEOPLE"))                      //如果是PEOPLE则是服务器发来的客户连接信息
          //主要用来刷新客户端的用户列表
        {
          parent.list1.clear();
          while(st.hasMoreTokens())                     //遍历st取得目前所连接的客户
          {
            String str=st.nextToken();
            parent.list1.addItem(str);
          }
        }
        else if(keyword.equals("MSG"))                   //如果关键字是MSG则是服务器传来的聊天信息
          //主要用来刷新客户端聊天信息区将每个客户的聊天内容显示出来
        {
          String usr=st.nextToken();
          parent.chat_txt.appendText(usr);
          parent.chat_txt.appendText(st.nextToken("\0"));
          parent.chat_txt.appendText("\n\n");
        }
        else if(keyword.equals("QUIT"))                //如果关键字是QUIT则是服务器关闭的信息
          //用来切断此次连接
        {
          System.out.println("Quit");
          try
          {parent.listen.stop();
          parent.listen=null;
          parent.soc.close();
          parent.soc=null;
          }catch(IOException e)
          {
            System.out.println("Error:"+e);
          }
          paren