zoukankan      html  css  js  c++  java
  • Java—Applet

    1  Applet的定义

    Applet是Java语言编写的,无法独立运行,但可以嵌入到网页中执行。它扩展了传统的编程结构和方法,可以通过互联网发布到任何具有Java编译环境浏览器的个体计算机上。

    如下所示是独立的Java应用程序和applet程序之间重要的不同:

    • Java中applet类继承了 java.applet.Applet类
    • Applet类没有定义main(),所以一个 Applet程序不会调用main()方法,
    • Applets被设计为嵌入在一个HTML页面。
    • 当用户浏览包含Applet的HTML页面,Applet的代码就被下载到用户的机器上。
    • 要查看一个applet需要JVM。 JVM可以是Web浏览器的一个插件,或一个独立的运行时环境。
    • 用户机器上的JVM创建一个applet类的实例,并调用Applet生命周期过程中的各种方法。
    • Applets有Web浏览器强制执行的严格的安全规则,applet的安全机制被称为沙箱安全。
    • applet需要的其他类可以用Java归档(JAR)文件的形式下载下来。

    2  Applet的用途

    用户可以静态显示Applet,像显示一幅图片或者一段文本一样;Applet也可以是一个动态交互过程,用户输入简单的数据,就会产生相应的响应。

    3  Applet的编写格式

    编写Applet时,首先要引入java.applet包中的类,这个类里包含三个接口和Applet的类:

    import java.applet.*;

    import java.applet.Applet;

    类头定义为:

    public class MyApplet extends Applet;

    用来声明自定义类是从Applet类扩展而来的。

    4 Applet的生命周期

    public void init();          初始化—在这个方法中设置一些变量的初始化,像界面布局设置等。目的是为你的applet提供所需的任何初始化。在Applet标记内的param标签被处理后调用该方法。

    public void start()         启动—Applet开始执行。浏览器调用init方法后,该方法被自动调用。每当用户从其他页面返回到包含Applet的页面时,则调用该方法。

    public void stop()         停止—Applet停止执行。当用户从包含applet的页面移除的时候,该方法自动被调用。因此,可以在相同的applet中反复调用该方法。

    public void destroy()    撤消—销毁Applet。此方法仅当浏览器正常关闭时调用。因为applets只有在HTML网页上有效,所以你不应该在用户离开包含Applet的页面后遗漏任何资源.

    paint: 该方法在start()方法之后立即被调用,或者在applet需要重绘在浏览器的时候调用。paint()方法实际上继承于java.awt。

    例:该类显示系统当前时间

     1 import java.applet.Applet;
     2 import java.awt.Frame;
     3 import java.awt.Graphics;
     4 import java.text.SimpleDateFormat;
     5 import java.util.Date;
     6 
     7 
     8 
     9 public class UseApplet extends Applet {
    10     /**
    11      * @Applet应用程序
    12      */
    13     private static final long serialVersionUID = 1548429421196793116L;
    14     String strTime;
    15     public void init()
    16     {
    17         Frame f=new Frame("欢迎");
    18         f.setSize(800,300);
    19     }
    20     public void start()
    21     {
    22         Date d = new Date();
    23         SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    24         strTime=time.format(d);
    25         repaint();
    26     }
    27     public void paint(Graphics g)
    28     {
    29         g.drawString("当前时间为:" + strTime,10,30);
    30     }
    31 
    32 }
    View Code

    5 Applet的显示

    Applet是嵌入在HTML网页中显示的。首先从服务器请求HTML网页,检测到Applet的类请求时,将所需类下载到本地,然后运行。

            HTML页面中引用Applet的标签为<applet></applet>,浏览器中执行Applet的步骤如下:

           (1) 浏览器请求HTML页面。

           (2) 读HTML页面的过程中发现<applet>标签,然后继续向服务器请求标签中声明的类文件。

           (3) 浏览器获取该类文件。

           (4) 字节码验证这个类是否合法。

           (5) 如果合法就开始执行类文件。

    为上面的UseApplet.class类写一个最简单的网页UseApplet.html:

    1 <html>
    2 <body>
    3 <applet code = "UseApplet.class" height = 200 width = 300>
    4 </applet>
    5 </body>
    6 </html>
    View Code

    6 参数设置

    在HTML页面中嵌入Applet类文件时,可以在<applet>标签中设置属性以控制Applet类文件的外观显示,也可以传递一些用户自定义属性。嵌入的格式为:

    <applet attributes1>

    <param attributes2>

    ...

    </applet>

    其中:

            (1)  <applet></applet>标签内为Applet的信息。

            (2)  <param>标记在<applet></applet>之间进行设置,然后由Applet自带的方法获取。

            (3)  <param>标记有两个自己的属性:name和value。例如:

      <param name ="aaa"value = "bbb">

            (4)  attribute1和attribute2的属性设置如表所示。

    其中,code属性是必须的,height和width属性用来设置高度和宽度,如果都为0,那么Applet将隐藏。

      对于例4.1中UseApplet.html,如果有

      <applet code = "UseApplet.class" height = 200 width = 300>

      </applet>

    那么说明网页加载的类名为UseApplet.class,类显示的高度为200像素点,宽度为300像素点。

            表中列出的attibute1属性为<applet>定义的属性。用户还可以根据Applet程序的需要,传递一些程序自身属性,这些属性通过attribute2中name属性给出所需参数的名,value属性给出所需参数的值。

      public String getParameter(String name)

    例:在加载类的网页上设置一个用户名,使得Applet输出为“HaHa,你好,当前时间为:(具体时间)”

     1 import java.awt.*;
     2 import java.applet.Applet;
     3 import java.util.Date;
     4 public class UsePara extends Applet
     5 {
     6     String strTime = new String();
     7     String strUser = new String();
     8     public void init()
     9     {
    10         //得到网页的参数:用户名
    11         strUser = getParameter("USER");
    12     }
    13     public void start()
    14     {
    15         Date d = new Date();
    16         SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    17         strTime=time.format(d);
    18         repaint();
    19     }
    20     public void paint(Graphics g)
    21     {
    22         g.setColor(Color.red);
    23         g.drawString(strUser + " 你好,当前时间为:" + strTime,20,30);
    24     }
    25 }
    View Code

    在UseApplet.html中添加一个用户参数设置:<param name = "USER" value = HaHa>

    1 <html>
    2 <body>
    3 <applet code = "UsePara.class" height = 200 width = 400>
    4 <param name = "USER" value = HaHa>
    5 </applet>
    6 </body>
    7 </html>
    View Code

    7 载入图片

    在java.applet包中存在一个接口AppletStub。当一个Applet创建之后,一个Applet Stub使用setStub方法附加到Applet上,这个Stub用来充当Applet和浏览器环境之间的接口。在这个接口中一个重要的方法:

    public URL getDocumentBase()

    该方法返回的是Applet类文件所在网页的网络路径。

    例如,如果一个Applet类文件嵌入在下面网页中

    http://java.sun.com/products/jdk/1.2/index.html

    那么返回的路径为

    http://java.sun.com/products/jdk/1.2/

    通过这个网络路径可以得到图片,从而由Applet类载入,载入图片的方法为:

            public Image getImage(URL url, String name)

    其中:

     (1)  url给出图片所在的网路路径。

     (2)  name给出图片的名字。

           例如:url路径可以为http://java.sun.com/products/jdk/1.2/,而name可以为路径下的图片index_01.gif。

    例:编写Applet,载入Applet类文件所在路径下的图片index_01.gif,然后如图所示显示图片。

     1 import java.awt.*;
     2 import java.applet.Applet;
     3 import java.net.*;
     4 public class UseImage extends Applet
     5 {
     6     //定义图像对象
     7     Image testImage;
     8      public void init()
     9      {
    10     //得到图片
    11     testImage = getImage(getDocumentBase(),"index_01.gif");
    12      }
    13      public void paint(Graphics g)
    14      {
    15     g.drawImage(testImage,0,0,this);
    16      }
    17 }
    View Code

    载入UseImage.class类的UseImage.html文件如下:

    1 <html>
    2 <body>
    3 <applet code = "UseImage.class" height = 200 width = 300>
    4 </applet>
    5 </body>
    6 </html>
    View Code

    8 载入声音

           Applet类提供一个用于载入声音的方法,即

            public AudioClip getAudioClip(URL url, String name)

            该方法返回由url和name决定的AudioClip对象。

           其中:

            (1)  url:音频剪辑的绝对URL地址;

            (2)  name:相对于上面的url,为音频剪辑的相对地址,通常指名字。

    例:编写载入声音的Applet。

     1 import java.awt.*;
     2 import java.applet.Applet;
     3 public class UseAudio extends Applet
     4 {
     5     public void init()
     6     {
     7     }
     8     public void start()
     9     {
    10         //播放Applet所在目录下的tiger.au声音文件
    11         getAudioClip(getDocumentBase(),"tiger.au").play();
    12       }
    13 };
    View Code

    载入类的HTML文件如下:

    1 <html>
    2 <body>
    3 <applet code = "UseAudio.class" height = 200 width = 300>
    4 </applet
    5 </body>
    6 </html>
    View Code

    在浏览器加载或者appletviewer命令启动时可以听见老虎的叫声,但必须保证tiger.au在UseAudio.class类文件所在的目录。

    9 Applet控制浏览器环境

             java.applet包中提供一个接口AppletContext,对应着Applet的环境,主要指包含Applet的网页文档等,在这个接口内有两个重要方法:

      pubilc void showDocument(URL url)

            浏览器下载Applet时,showDocument可以将当前Applet页面用于显示url网址的内容。 url 给出页面的绝对网络路径。

             public void showDocument(URL url, String target)

             target可以表明url显示的位置,有四种情况,如表所示。

    public void showStatus(String status)

    字符串status显示在状态栏中,告知用户当前类文件运行中的状态。

    例:编写Applet,在状态栏显示鼠标单击Applet的次数

     1 import java.applet.*;
     2 import java.applet.Applet;
     3 import java.awt.event.*;
     4 public class ShowStatus extends Applet
     5 {
     6     int count = 0;
     7     public void init()
     8 {
     9 }
    10 public boolean mouseClicked(MouseEvent e)
    11 {
    12     count ++;    
    13     getAppletContext().showStatus("你好,你已经点击了" + count + "次了!");
    14     return true;
    15 }
    16 }
    View Code

    例:编写Applet,在一个框架中显示不同来源的网页信息,如图所示。左框架为西安交通大学首页,右框架为新浪网首页。

     1 import java.applet.*;
     2 import java.applet.Applet;
     3 import java.net.URL;
     4 
     5 public class ShowHtml extends Applet
     6 {
     7     public void init()
     8     {
     9     }
    10       public void start()
    11      {
    12     try
    13     {
    14         //创建URL对象
    15         URL urlName=new URL("http://www.xjtu.edu.cn");
    16         //在左框架显示网页
    17         getAppletContext().showDocument(urlName,"left");
    18         urlName = new URL("http://www.sina.com.cn");
    19         //右框架显示网页
    20         getAppletContext().showDocument(urlName,"right");
    21     }
    22        catch(MalformedURLException e)
    23        {
    24     System.out.println(e.getMessage());
    25         }
    26     }
    27 }
    View Code

    载入Applet的网页Head.html的代码如下:

    1 <html>
    2 <body>
    3 <applet code = "ShowHtml.class" height = 0 width = 0>
    4 </applet>
    View Code

    <h3>这是一个框架网页,上面的框架隐藏载入applet类文件,由applet控制左框架显示西安交通大学的主页,右框架显示新浪网的主页。

    </body>

    </html>

    装配的框架网页ShowHtml.html的源代码如下,可以看见其中框架名字左边的为left而右边的为right。

    <html>

    <frameset rows="21%,*">

    <frame name="guid" src="Head.html">

    <frameset cols="50%,*" frameborder="YES" border="1" framespacing="1">

      <frame name="left" src="">

      <frame name="right" src="">

          </frameset>

    </frameset>

    </html>

    10  服务器下配置Applet文件

    由于Applet文件是客户端浏览器从服务器端下载的HTML网页,所以将文件配置到服务器端,由客户进行访问。

    本机中使用的服务器为Tomcat 4.0,安装成功后重启动,则服务器开始运转,在浏览器的网址栏键入http://10.167.27.139:8080/index.html,如果出现如图所示的Tomcat主网页,则证明服务器测试正常。

    11  JAR文件

    在JDK的安装目录的bin子目录下有一个jar.exe文件,这就是JAR文件的操作工具,用它及一系列选项来实现对JAR文件的操作。jar命令的格式如下:

    jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...

    其中:

    (1)  ctxu四者必选其一,各选项的含义如下:

          -c  创建新的存档;

          -t  列出存档内容的列表;

          -x  展开存档中命名的(或所有的)文件;

          -u  更新已存在的存档。

    (2)    vfm0M为可选项,各选项的含义如下:

          -v  生成详细输出到标准输出上;

          -f  指定存档文件名;

          -m  包含来自标明文件的标明信息;

          -0  只存储方式,未用ZIP压缩格式;

          -M  不产生所有项的清单(manifest)文件;

          -C  改变到指定的目录,并且包含下列文件。

          (3) 清单(manifest)文件名和存档文件名都需要指定,指定的顺序依照命令行中“m”和“f”标志的顺序。

          例如:

          ① 将两个class文件存档到一个名为“classes.jar”的存档文件中:

           jar cvf classes.jar Foo.class Bar.class

          ② 用一个存在的清单(manifest)文件“mymanifest”将foo/目录下的所有文件存档到一个名为“classes.jar”的存档文件中:

           jar cvfm classes.jar mymanifest -C foo/ .

           对JAR文件常用的操作有三种:创建JAR文件、列出JAR文件和抽取JAR文件。

    1). 创建JAR文件

            jar cvf UseImage.jar UseImage.class index_01.gif

           当用JAR工具创建新的档案时,自动增加一个声明文件到文档中。如果用户需要创建自己的声明文件时,则指定m选项。可以看到本目录下多了一个UseImage.jar文件。

    2). 列出JAR文件的内容

        jar tvf UseImage.jar

        执行命令后列出JAR文件中的内容。

    3). 抽取JAR文件

           jar xvf UseImage.jar

           抽取JAR文件是将JAR中包含的类以及相关文件逐一恢复。在某个目录下建立JAR文件夹,将JAR文件放入此文件夹,然后进行抽取,可以看见JAR目录下除了UseImage.class和index_01.gif,还有META-INF子目录,下面有一个文件MANIFEST.MF。

    4). 客户端使用jar文件

    <applet>标签中添加一个属性名字为archive,它的值为要载入的.jar文件。例如archive="UseImage.jar"。

    例如,将某个目录下的UseImage.html文件代码改为:

    <html>

    <body>

    <applet code = "UseImage.class" archive="UseImage.jar" height = 200 width = 300>

    </applet>

    </body>

    </html>

    12  Applet和应用程序

    例:

     1 import java.awt.*;
     2 import java.awt.event.*;
     3 import java.applet.Applet;
     4 import java.util.Date;
     5 public class AppPara extends Applet
     6 {
     7     String strTime = new String();
     8     static String strUser = new String();
     9     static boolean inApplet = true;
    10     public void init()
    11     {
    12     //如果从Applet载入,从网页得到参数
    13     if(inApplet)
    14         strUser = getParameter("USER");
    15     }
    16     public void start()
    17     {
    18         Date d = new Date();
    19         strTime = d.toString();
    20         repaint();
    21     }
    22     public void paint(Graphics g)
    23     {
    24        g.setColor(Color.red);
    25        g.drawString(strUser + " 你好,当前时间为:" + strTime,20,30);
    26 }
    27 public static void main(String[] args)
    28 {
    29         inApplet = false;
    30         //如果从命令行提示符状态进入,获取参数
    31         if (args.length < 1)
    32         {
    33     System.out.println("缺少用户参数");
    34     System.exit(0);
    35          }
    36         else
    37     strUser = new String(args[0]);
    38 //创建一个框架
    39 Frame f = new Frame("时间");
    40 //关闭窗口时退出系统
    41 f.addWindowListener(new WindowAdapter()
    42 {
    43     public void windowClosing(WindowEvent evt)
    44     {
    45         System.exit(0);
    46     }
    47 });
    48 //创建一个AppletApp对象
    49 AppPara a = new AppPara();
    50     //初始化
    51     a.init();
    52     //将对象载入框架
    53     f.add("Center",a);
    54     //设置框架大小
    55     f.setSize(400,200);
    56     //显示框架
    57     f.show();
    58     //启动对象
    59     a.start();
    60       }
    61 }
    View Code

    在命令提示符状态键入命令“java AppPara 王飞”后按回车键,可弹出界面。

  • 相关阅读:
    HTML5 3D 粒子波浪动画特效
    CSS3手机端侧滑菜单 4种滑动菜单特效
    HTML5 Canvas生成粒子效果的人物头像
    HTML5实现手势屏幕解锁
    Slideout.js – 触摸滑出式 Web App 导航菜单
    简历特训笔记
    leetcode-184-Department Highest Salary 优化记录
    正则表达式学习笔记
    【原创】第一次实习面试
    【原创】第一次做网站的总结
  • 原文地址:https://www.cnblogs.com/feitiannengdou/p/5446473.html
Copyright © 2011-2022 走看看