applet java_Java—Applet
1? Applet的定義
Applet是Java語言編寫的,無法獨立運行,但可以嵌入到網(wǎng)頁中執(zhí)行。它擴展了傳統(tǒng)的編程結(jié)構(gòu)和方法,可以通過互聯(lián)網(wǎng)發(fā)布到任何具有Java編譯環(huán)境瀏覽器的個體計算機上。
如下所示是獨立的Java應用程序和applet程序之間重要的不同:
Java中applet類繼承了 java.applet.Applet類
Applet類沒有定義main(),所以一個 Applet程序不會調(diào)用main()方法,
Applets被設(shè)計為嵌入在一個HTML頁面。
當用戶瀏覽包含Applet的HTML頁面,Applet的代碼就被下載到用戶的機器上。
要查看一個applet需要JVM。 JVM可以是Web瀏覽器的一個插件,或一個獨立的運行時環(huán)境。
用戶機器上的JVM創(chuàng)建一個applet類的實例,并調(diào)用Applet生命周期過程中的各種方法。
Applets有Web瀏覽器強制執(zhí)行的嚴格的安全規(guī)則,applet的安全機制被稱為沙箱安全。
applet需要的其他類可以用Java歸檔(JAR)文件的形式下載下來。
2? Applet的用途
用戶可以靜態(tài)顯示Applet,像顯示一幅圖片或者一段文本一樣;Applet也可以是一個動態(tài)交互過程,用戶輸入簡單的數(shù)據(jù),就會產(chǎn)生相應的響應。
3? Applet的編寫格式
編寫Applet時,首先要引入java.applet包中的類,這個類里包含三個接口和Applet的類:
import java.applet.*;
import java.applet.Applet;
類頭定義為:
public class MyApplet extends Applet;
用來聲明自定義類是從Applet類擴展而來的。
4 Applet的生命周期
public void init();??????????初始化—在這個方法中設(shè)置一些變量的初始化,像界面布局設(shè)置等。目的是為你的applet提供所需的任何初始化。在Applet標記內(nèi)的param標簽被處理后調(diào)用該方法。
public void start()?????????啟動—Applet開始執(zhí)行。瀏覽器調(diào)用init方法后,該方法被自動調(diào)用。每當用戶從其他頁面返回到包含Applet的頁面時,則調(diào)用該方法。
public void stop()?????????停止—Applet停止執(zhí)行。當用戶從包含applet的頁面移除的時候,該方法自動被調(diào)用。因此,可以在相同的applet中反復調(diào)用該方法。
public void destroy()????撤消—銷毀Applet。此方法僅當瀏覽器正常關(guān)閉時調(diào)用。因為applets只有在HTML網(wǎng)頁上有效,所以你不應該在用戶離開包含Applet的頁面后遺漏任何資源.
paint: 該方法在start()方法之后立即被調(diào)用,或者在applet需要重繪在瀏覽器的時候調(diào)用。paint()方法實際上繼承于java.awt。
例:該類顯示系統(tǒng)當前時間
1 importjava.applet.Applet;2 importjava.awt.Frame;3 importjava.awt.Graphics;4 importjava.text.SimpleDateFormat;5 importjava.util.Date;6
7
8
9 public class UseApplet extendsApplet {10 /**
11 * @Applet應用程序12 */
13 private static final long serialVersionUID = 1548429421196793116L;14 String strTime;15 public voidinit()16 {17 Frame f=new Frame("歡迎");18 f.setSize(800,300);19 }20 public voidstart()21 {22 Date d = newDate();23 SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");24 strTime=time.format(d);25 repaint();26 }27 public voidpaint(Graphics g)28 {29 g.drawString("當前時間為:" + strTime,10,30);30 }31
32 }
View Code
5 Applet的顯示
Applet是嵌入在HTML網(wǎng)頁中顯示的。首先從服務器請求HTML網(wǎng)頁,檢測到Applet的類請求時,將所需類下載到本地,然后運行。
HTML頁面中引用Applet的標簽為,瀏覽器中執(zhí)行Applet的步驟如下:
(1) 瀏覽器請求HTML頁面。
(2) 讀HTML頁面的過程中發(fā)現(xiàn)標簽,然后繼續(xù)向服務器請求標簽中聲明的類文件。
(3) 瀏覽器獲取該類文件。
(4) 字節(jié)碼驗證這個類是否合法。
(5) 如果合法就開始執(zhí)行類文件。
為上面的UseApplet.class類寫一個最簡單的網(wǎng)頁UseApplet.html:
1
2
3
4
5
6
View Code
6 參數(shù)設(shè)置
在HTML頁面中嵌入Applet類文件時,可以在標簽中設(shè)置屬性以控制Applet類文件的外觀顯示,也可以傳遞一些用戶自定義屬性。嵌入的格式為:
...
其中:
(1)? 標簽內(nèi)為Applet的信息。
(2)? 標記在之間進行設(shè)置,然后由Applet自帶的方法獲取。
(3)? 標記有兩個自己的屬性:name和value。例如:
(4)? attribute1和attribute2的屬性設(shè)置如表所示。
其中,code屬性是必須的,height和width屬性用來設(shè)置高度和寬度,如果都為0,那么Applet將隱藏。
對于例4.1中UseApplet.html,如果有
那么說明網(wǎng)頁加載的類名為UseApplet.class,類顯示的高度為200像素點,寬度為300像素點。
表中列出的attibute1屬性為定義的屬性。用戶還可以根據(jù)Applet程序的需要,傳遞一些程序自身屬性,這些屬性通過attribute2中name屬性給出所需參數(shù)的名,value屬性給出所需參數(shù)的值。
public String getParameter(String name)
例:在加載類的網(wǎng)頁上設(shè)置一個用戶名,使得Applet輸出為“HaHa,你好,當前時間為:(具體時間)”
1 import java.awt.*;2 importjava.applet.Applet;3 importjava.util.Date;4 public class UsePara extendsApplet5 {6 String strTime = newString();7 String strUser = newString();8 public voidinit()9 {10 //得到網(wǎng)頁的參數(shù):用戶名
11 strUser = getParameter("USER");12 }13 public voidstart()14 {15 Date d = newDate();16 SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");17 strTime=time.format(d);18 repaint();19 }20 public voidpaint(Graphics g)21 {22 g.setColor(Color.red);23 g.drawString(strUser + " 你好,當前時間為:" + strTime,20,30);24 }25 }
View Code
在UseApplet.html中添加一個用戶參數(shù)設(shè)置:
1
2
3
4
5
6
7
View Code
7 載入圖片
在java.applet包中存在一個接口AppletStub。當一個Applet創(chuàng)建之后,一個Applet Stub使用setStub方法附加到Applet上,這個Stub用來充當Applet和瀏覽器環(huán)境之間的接口。在這個接口中一個重要的方法:
public URL getDocumentBase()
該方法返回的是Applet類文件所在網(wǎng)頁的網(wǎng)絡路徑。
例如,如果一個Applet類文件嵌入在下面網(wǎng)頁中
那么返回的路徑為
http://java.sun.com/products/jdk/1.2/
通過這個網(wǎng)絡路徑可以得到圖片,從而由Applet類載入,載入圖片的方法為:
public Image getImage(URL url, String name)
其中:
(1)? url給出圖片所在的網(wǎng)路路徑。
(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 importjava.applet.Applet;3 import java.net.*;4 public class UseImage extendsApplet5 {6 //定義圖像對象
7 Image testImage;8 public voidinit()9 {10 //得到圖片
11 testImage = getImage(getDocumentBase(),"index_01.gif");12 }13 public voidpaint(Graphics g)14 {15 g.drawImage(testImage,0,0,this);16 }17 }
View Code
載入UseImage.class類的UseImage.html文件如下:
1
2
3
4
5
6
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 importjava.applet.Applet;3 public class UseAudio extendsApplet4 {5 public voidinit()6 {7 }8 public voidstart()9 {10 //播放Applet所在目錄下的tiger.au聲音文件
11 getAudioClip(getDocumentBase(),"tiger.au").play();12 }13 };
View Code
載入類的HTML文件如下:
1
2
3
4
6
View Code
在瀏覽器加載或者appletviewer命令啟動時可以聽見老虎的叫聲,但必須保證tiger.au在UseAudio.class類文件所在的目錄。
9 Applet控制瀏覽器環(huán)境
java.applet包中提供一個接口AppletContext,對應著Applet的環(huán)境,主要指包含Applet的網(wǎng)頁文檔等,在這個接口內(nèi)有兩個重要方法:
pubilc void showDocument(URL url)
瀏覽器下載Applet時,showDocument可以將當前Applet頁面用于顯示url網(wǎng)址的內(nèi)容。 url 給出頁面的絕對網(wǎng)絡路徑。
public void showDocument(URL url, String target)
target可以表明url顯示的位置,有四種情況,如表所示。
public void showStatus(String status)
字符串status顯示在狀態(tài)欄中,告知用戶當前類文件運行中的狀態(tài)。
例:編寫Applet,在狀態(tài)欄顯示鼠標單擊Applet的次數(shù)
1 import java.applet.*;2 importjava.applet.Applet;3 import java.awt.event.*;4 public class ShowStatus extendsApplet5 {6 int count = 0;7 public voidinit()8 {9 }10 public booleanmouseClicked(MouseEvent e)11 {12 count ++;13 getAppletContext().showStatus("你好,你已經(jīng)點擊了" + count + "次了!");14 return true;15 }16 }
View Code
例:編寫Applet,在一個框架中顯示不同來源的網(wǎng)頁信息,如圖所示。左框架為西安交通大學首頁,右框架為新浪網(wǎng)首頁。
1 import java.applet.*;2 importjava.applet.Applet;3 importjava.net.URL;4
5 public class ShowHtml extendsApplet6 {7 public voidinit()8 {9 }10 public voidstart()11 {12 try
13 {14 //創(chuàng)建URL對象
15 URL urlName=new URL("http://www.xjtu.edu.cn");16 //在左框架顯示網(wǎng)頁
17 getAppletContext().showDocument(urlName,"left");18 urlName = new URL("http://www.sina.com.cn");19 //右框架顯示網(wǎng)頁
20 getAppletContext().showDocument(urlName,"right");21 }22 catch(MalformedURLException e)23 {24 System.out.println(e.getMessage());25 }26 }27 }
View Code
載入Applet的網(wǎng)頁Head.html的代碼如下:
1
2
3
4
View Code
這是一個框架網(wǎng)頁,上面的框架隱藏載入applet類文件,由applet控制左框架顯示西安交通大學的主頁,右框架顯示新浪網(wǎng)的主頁。
裝配的框架網(wǎng)頁ShowHtml.html的源代碼如下,可以看見其中框架名字左邊的為left而右邊的為right。
10? 服務器下配置Applet文件
由于Applet文件是客戶端瀏覽器從服務器端下載的HTML網(wǎng)頁,所以將文件配置到服務器端,由客戶進行訪問。
本機中使用的服務器為Tomcat 4.0,安裝成功后重啟動,則服務器開始運轉(zhuǎn),在瀏覽器的網(wǎng)址欄鍵入http://10.167.27.139:8080/index.html,如果出現(xiàn)如圖所示的Tomcat主網(wǎng)頁,則證明服務器測試正常。
11? JAR文件
在JDK的安裝目錄的bin子目錄下有一個jar.exe文件,這就是JAR文件的操作工具,用它及一系列選項來實現(xiàn)對JAR文件的操作。jar命令的格式如下:
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...
其中:
(1)? ctxu四者必選其一,各選項的含義如下:
-c? 創(chuàng)建新的存檔;
-t? 列出存檔內(nèi)容的列表;
-x? 展開存檔中命名的(或所有的)文件;
-u? 更新已存在的存檔。
(2)? ? vfm0M為可選項,各選項的含義如下:
-v? 生成詳細輸出到標準輸出上;
-f? 指定存檔文件名;
-m? 包含來自標明文件的標明信息;
-0? 只存儲方式,未用ZIP壓縮格式;
-M? 不產(chǎn)生所有項的清單(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文件常用的操作有三種:創(chuàng)建JAR文件、列出JAR文件和抽取JAR文件。
1). 創(chuàng)建JAR文件
jar cvf UseImage.jar UseImage.class index_01.gif
當用JAR工具創(chuàng)建新的檔案時,自動增加一個聲明文件到文檔中。如果用戶需要創(chuàng)建自己的聲明文件時,則指定m選項。可以看到本目錄下多了一個UseImage.jar文件。
2). 列出JAR文件的內(nèi)容
jar tvf UseImage.jar
執(zhí)行命令后列出JAR文件中的內(nèi)容。
3). 抽取JAR文件
jar xvf UseImage.jar
抽取JAR文件是將JAR中包含的類以及相關(guān)文件逐一恢復。在某個目錄下建立JAR文件夾,將JAR文件放入此文件夾,然后進行抽取,可以看見JAR目錄下除了UseImage.class和index_01.gif,還有META-INF子目錄,下面有一個文件MANIFEST.MF。
4). 客戶端使用jar文件
標簽中添加一個屬性名字為archive,它的值為要載入的.jar文件。例如archive="UseImage.jar"。
例如,將某個目錄下的UseImage.html文件代碼改為:
12? Applet和應用程序
例:
1 import java.awt.*;2 import java.awt.event.*;3 importjava.applet.Applet;4 importjava.util.Date;5 public class AppPara extendsApplet6 {7 String strTime = newString();8 static String strUser = newString();9 static boolean inApplet = true;10 public voidinit()11 {12 //如果從Applet載入,從網(wǎng)頁得到參數(shù)
13 if(inApplet)14 strUser = getParameter("USER");15 }16 public voidstart()17 {18 Date d = newDate();19 strTime =d.toString();20 repaint();21 }22 public voidpaint(Graphics g)23 {24 g.setColor(Color.red);25 g.drawString(strUser + " 你好,當前時間為:" + strTime,20,30);26 }27 public static voidmain(String[] args)28 {29 inApplet = false;30 //如果從命令行提示符狀態(tài)進入,獲取參數(shù)
31 if (args.length < 1)32 {33 System.out.println("缺少用戶參數(shù)");34 System.exit(0);35 }36 else
37 strUser = new String(args[0]);38 //創(chuàng)建一個框架
39 Frame f = new Frame("時間");40 //關(guān)閉窗口時退出系統(tǒng)
41 f.addWindowListener(newWindowAdapter()42 {43 public voidwindowClosing(WindowEvent evt)44 {45 System.exit(0);46 }47 });48 //創(chuàng)建一個AppletApp對象
49 AppPara a = newAppPara();50 //初始化
51 a.init();52 //將對象載入框架
53 f.add("Center",a);54 //設(shè)置框架大小
55 f.setSize(400,200);56 //顯示框架
57 f.show();58 //啟動對象
59 a.start();60 }61 }
View Code
在命令提示符狀態(tài)鍵入命令“java AppPara 王飛”后按回車鍵,可彈出界面。
總結(jié)
以上是生活随笔為你收集整理的applet java_Java—Applet的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金笛邮件服务器解析中小企业对自建邮件系统
- 下一篇: 苹果开发者账号申请说明