当前位置:  技术问答>java相关

如何将一段applet改成application????

    来源: 互联网  发布时间:2015-11-17

    本文导语:  我想这段聊天室的代码改成application的 应该什么样改? import java.awt.*; import java.awt.event.*; import java.applet.*; import java.net.*; import java.io.*; import java.util.*; public class chatApplet extends Applet {   /*以下用于定义UI变量*/ ...

我想这段聊天室的代码改成application的
应该什么样改?
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.*;
import java.io.*;
import java.util.*;

public class chatApplet extends Applet {
  /*以下用于定义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 void init()                 //初始化图形界面
{
  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(""));
 parent.chat_txt.appendText("nn");
 }
 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);
              }
  parent.list1.clear();
 
 return;
 }
  }

 }     //end of run method
}      //end of Listen inner class


 
}     //end of chatApplet class

|
只要将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.*;
/**
 * 

Title: 


 * 

Description: 


 * 

Copyright: Copyright (c) 2002


 * 

Company: 


 * @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(""));
          parent.chat_txt.appendText("nn");
        }
        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

    
 
 

您可能感兴趣的文章:

  • 请问application (or applet)如何实现对applet 小程序的调用??
  • application和APPLET的移植
  • Java Application和Java Applet?
  • Applet和Application通讯有问题:高手请进
  • applet程序不能实现与application程序之间的通信,怎么办呢?
  • 如何去掉Application中该死的applet窗口标签
  • 请问::大家用Java是做application还是applet?我要是学Java,重点放在那儿部分?
  • 请问如何向servlet发送消息。源可以是applet或application或其他的什么东东。
  • 谁知道为什么我的TextPad中没有编译Java、运行Application、运行Applet这三个选项????
  • 在application或applet中调用javabean如果其中一个参数是一个文件名,在bean中会对这个文件的内容做修改会出现怎么样的情况.???
  • 为何JButton在application中用setToolTipText可以,但在applet中用就没效?知道如何解决的请进来拿分!
  • Application转化为Applet需要做那些更改?欢迎讨论(发表意见就给分)
  • Applet与Application可以相互转换吗?
  • 关于一个Application 怎么样转换成 Applet 的问题!!!
  • 高分征用!急!将APPLET转为APPLICATION
  • 一个可以接收键盘事件的application修改成applet用IE查看时就无法接收键盘事件,请问应该如何处理?
  • 各位大虾,有谁对在Applet、Application下做打印有心得?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.applet类applet的类成员方法: applet定义及介绍
  • 如何让Applet里的控件随着Applet大小改变而一直占满整个Applet呢?
  • java命名空间java.applet类applet.accessibleapplet的类成员方法: applet.accessibleapplet定义及介绍
  • 对applet坐数字签名后,如果重新用jar对applet打包,需要重新做applet数字签名吗?
  • java命名空间java.applet类applet的类成员方法: getappletcontext定义及介绍
  • 为什么我的applet编译完,之后除了applet1.class之外,还有一个applet$1.class?
  • java命名空间java.applet类applet的类成员方法: getappletinfo定义及介绍
  • 急,我想问一下调用一个对话框的命令语句,比方说我已建立了一个Applet2,接下来该如何在Applet1中点击一个按钮来打开这个Applet2.谢谢
  • java命名空间java.applet类applet的类成员方法: isactive定义及介绍
  • 如何让IE认识applet所带的数字签名,而不是让证书仓库认识这个带数字签名的applet,就是说不装jdk也可以在IE里面使用带有签名的applet,详情请进
  • java命名空间java.applet类applet的类成员方法: stop定义及介绍
  • 请问能在浏览器调入APPLET后,在APPLET内部改变其自身的大小嘛?
  • java.applet类applet的类成员方法: getcodebase定义及介绍
  • applet 如何启动新的 applet
  • java命名空间java.applet类applet的类成员方法: init定义及介绍
  • 如何把applet窗口里的Java Applet Window去掉?
  • java命名空间java.applet类applet的类成员方法: destroy定义及介绍
  • Applet对本地资源是不能访问的,那如果我要用Applet做打印设计,那如何是好呢??
  • java命名空间java.applet类applet的类成员方法: getparameterinfo定义及介绍
  • Applet问题,applet在tomcat+apache环境下是否支持FileDialog类,急,急 !!!!快来抢分呀!!!!
  • java命名空间java.applet类applet的类成员方法: getdocumentbase定义及介绍
  • Applet中的ArrayList怎么传到javascript中,反之,js中的数组如何传入APPLET中?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3