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 王飛”后按回車鍵,可彈出界面。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM