三:Java之Applet

來源:互聯網
上載者:User

標籤:java   applet   application   html   應用程式   

首先我要說的是Applet是一種應用程式,它是一種由JAVA編寫的小應用程式,通常這種應用程式都像他的名字一樣,是一個很小的程式,也許有些朋友就會問了,那麼它是用來幹什麼的呢?JAVA程式就是JAVA程式啊,為什麼要弄出個小應用程式?

一、Applet初識

       Applet編程是JAVA程式設計語言至關重要的獨特功能,它不同與一般的JAVA程式的地方是,它能夠嵌入在HTML網頁中,並由支援JAVA的WEB瀏覽器來動態下載解釋執行,當然我們所使用的IE瀏覽器3.0以上的版本是支援JAVA小應用程式的,有了這種小應用程式,我們的網頁就能有一定的互動功能。

       在Java Applet中,可以實現圖形繪製,字型和顏色控制,動畫和聲音的插入,人機互動及網路交流等功能。 Applet還提供了名為抽象視窗工具箱(Abstract Window Toolkit, AWT)的視窗環境開發工具。 AWT利用使用者電腦的GUI元素,可以建立標準的圖形化使用者介面,如視窗、按鈕、捲軸等等。目前,在網路上有非常多的Applet範例來生動地展現這些功能,讀者可以去調閱相應的網頁以觀看它們的效果。

        Applet的工作原理

       含有Applet的網頁的HTML檔案代碼中部帶有<applet> 和</applet>這樣一對標記,當支援Java的網路瀏覽器遇到這對標記時,就將下載相應的小應用程式代碼並在本機電腦上執行該Applet。

       Applet的下載與圖形檔案一樣需要一定的時間,若干秒後它才能在螢幕上顯示出來。等待的時間則取決於Applet的大小和使用者的網路連接的速度。一旦下載以後,它便和本機電腦上的程式以相同的速度運行了。

 

       Applet在使用者的電腦上執行時,還可以下載其它的資源,如音效檔、影像檔或更多的Java代碼,有些Applet還允許使用者進行互動式操作。但這需要重複的連結與下載,因此速度很慢,這是一個亟待解決的問題,可以想到的一個好辦法是採用類似快取的技術,將每次下載的檔案都臨時儲存在使用者的硬碟上,雖然第一次使用時花的時間比較多,但當再次使用時,只需直接從硬碟上讀取檔案而無需再與Internet串連,便可以大大提高效能了。

二、Applet和application

   在JAVA語言中,能夠獨立啟動並執行程式稱為Java應用程式(Application)。Java語言還有另外一種程式——Application 程式。

JavaApplet和JavaApplication在結構方面的主要區別表現在:

(1)運行方式不同。Java Applet程式不能單獨運行,它必須依附於一個用HTML語言編寫的網頁並嵌入其中,通過與Java相容的瀏覽器來控制執行。Java Application是完整的程式,可以獨立運行,只要有支援Java的虛擬機器,它就可以獨立運行而不需要其他檔案的支援。

(2)運行工具不同。運行Java Applet程式的解譯器不是獨立的軟體,而是嵌在瀏覽器中作為瀏覽器軟體的一部分。Java Application程式被編譯以後,用普通的Java解譯器就可以使其邊解釋邊執行,而Java Applet必須通過網路瀏覽器或者Applet觀察器才能執行。

(3)程式結構不同。每個Java Application程式必定含有一個並且只有一個main方法,程式執行時,首先尋找main方法,並以此為進入點開始運行。含有main方法的那個類,常被稱為主類,也就是說,Java Application程式都含有一個主類。而Applet程式則沒有含main方法的主類,這也正是Applet程式不能獨立啟動並執行原因。儘管Applet沒有含main方法的主類,但Applet一定有一個從 java.applet.Applet派生的類,它是由Java系統提供的。

(4)Java Applet程式可以直接利用瀏覽器或AppletViewer提供的圖形化使用者介面,而Java Application程式則必須另外書寫專用代碼來營建自己的圖形介面。

(5)受到的限制不同Java Application程式可以設計成能進行各種操作的程式,包括讀/寫檔案的操作,但是 Java Applet 對網站的磁碟檔案既不能進行讀操作,也不能進行寫 操作。然而,由於 Applet的引入,使Web頁面具有動態多媒體效果和可互動效能,這使由名為超文本、實為純文字的HTML語言編寫成的Web頁面真正具有了超文本功能,不但可以顯示文本資訊,而且還可以有各種圖片效果和動態圖形效果,從而使頁面顯得生動美麗;另外,Applet使Web頁面增加了按鈕等功能,從而增加了互動性。

JavaApplet和JavaApplication在執行方面的主要區別表現在:Java Application一般是在本地機上運行,而Java Applet一般放在伺服器上,它是根據本地機的請求被下載到本地機,然後才在本地機上運行。

三、基本架構

Applet的基本架構是由一套方法組成的,它們提供了瀏覽器與Applet之間的介面以及二者執行控制的基本機制;方主要法如下:

1、init():

建立Applet時執行,該方法只被執行一次;

當Applet程式第一次被支援Java的瀏覽器載入時,便執行該方法;在Applet程式的生命週期中,該方法只被執行一次,因此可以在其中進行一些只執行一次的初始化操作,如:處理由瀏覽器傳遞進來的參數、添加使用者介面組件、載入映像和音效檔等;Applet程式有預設的構造方法,但它習慣於在init()方法中執行所有的初始化,而不是在預設的構造方法內;

2、start():

該方法多次執行,當瀏覽器從表徵圖恢複成視窗,或者是返回該首頁時執行;

系統在調用完init()方法之後,將自動調用此方法;而且每當瀏覽器從表徵圖恢複為視窗時,或者使用者離開包含該Applet程式的首頁後又再返回時,系統都會再執行一遍start()方法;因此,該方法在Applet程式的生命週期中被調用多次,以啟動Applet程式的執行,這一點與init()方法不同;該方法是Applet程式的主體,在其中可以執行一些需要重複執行的任務或者重新啟用一個線程,例如:開始動畫或播放聲音等;

3、stop():

該方法被多次執行,當瀏覽器變成表徵圖時,或者是離開首頁時執行,主要功能是停止一些耗用系統資源的工作;

與start()相反,當使用者離開Applet程式所在頁面或瀏覽器變成表徵圖時,會自動調用此方法;因此,該方法在Applet的生命週期中也被多次調用;這樣使得可以在使用者並不注意Applet程式的時候,停止一些耗用系統資源的工作(如中斷一個線程),以免影響系統的運行速度,且並不需要去人為地去調用該方法;如果你的Applet程式中不包含動畫、聲音等程式,通常也不必重載該方法;

4、destroy():

該方法用來釋放資源,在stop()之後執行;

瀏覽器正常關閉時,Java自動調用這個方法;該方法方法用於回收任何一個與系統無關的記憶體資源;當然,如果這個Applet程式仍然處於活動狀態,那麼Java會在調用該方法之前,先自動調用stop()方法;

5、其它方法:

paint(Graphicsg):該方法用於具體的介面繪製;

update():該方法用於具體的介面重新整理;

repaint():該方法用於具體的介面重繪;

 

四、範例程式

1、Applet代碼:

<span style="font-size:18px;">importjava.io.*;importjava.awt.*;importjava.lang.*;importjava.applet.*;publicclass MyApplet extends Applet{  private String strUserName;  private String strPassword;  private int   iCount;  private int   iPosX;  public void init()  {    strUserName =this.getParameter("username");    strPassword =this.getParameter("password");    iCount     = Integer.parseInt(this.getParameter("count"));    iPosX      = 25;  }  public void paint(Graphics g)  {    g.drawRect(10, 10, iWidth, iHeigh);    g.drawString("UserName: " +strUserName + " Count:" + iCount, iPosX, 60);    g.drawString("Password: " +strPassword, iPosX, 80);  }}</span>


2、HTML代碼:

<span style="font-size:18px;"><html>  <head>    <metahttp-equiv="Content-Type" content="text/html;charset=GB2312">    <metahttp-equiv="Content-Language" Content="zh-CN">    <title>JSP APPLET TEST</title>  </head>  <body>    <Applet id="MyApplet"name="MyApplet" code="MyApplet.class"codebase="." height="300" width="300">      <param name="username"value="sankhya">      <param name="password"value="bdxnote">      <param name="count"value="30">    </Applet>  </body></html></span>


五、Applet相關問題

1.  Applet是什麼

 Applet又稱為Java小應用程式,是能夠嵌入到一個HTML頁面中,並且可通過Web瀏覽器下載和執行的一種Java類。  Applet不需要main()方法,由Web瀏覽器中內嵌的Java虛擬機器調用執行。

2.  Applet的安全限制

 因為applet是從遠端伺服器上下載並且在本地執行,所以安全性就顯得格外重要。通過限制applet在沙箱(applet的運行環境)中運行,保證了對本地系統而言applet是安全的。

  applet在沙箱中運行時:

⑴    不能運行任何本地可執行程式;

⑵    除了存放下載的applet的伺服器外,applet不能和其它主機進行通訊。

⑶不能對本地檔案系統進行讀寫。

3.  Applet的生命週期

  init():當瀏覽器載入applet,進行初始化的時候調用該方法。

  start():在init()方法之後調用。當使用者從其它頁面轉到包含applet的頁面時,該方法也被調用。

  stop():在使用者離開包含applet的頁面時被調用。

 destroy():當applet不再被使用,或瀏覽器退出的時候,該方法被調用。

4.  paint()方法這個paint還是來自於AWT

 Applet本質上是圖形方式的,我們應該在圖形環境中繪製我們的顯示內容。

我們可以通過建立一個paint()方法在Applet的panel上繪圖。只要Applet的顯示需要重新整理,paint()方法就會被瀏覽器環境調用。例如,當Applet的顯示尺寸發生變化的時候,或瀏覽器視窗被最小化或被要求以表徵圖方式顯示時,這種調用就會發生。

我們應該編寫自己的paint()方法,以使它在任何時候被調用,都能正常地工作。對它的調用是非同步產生的,且由Applet的運行環境而不是程式來驅動。

paint()方法帶有一個參數,它是java.awt.Graphics類的一個執行個體。這個參數總是建立該Applet的panel的圖形上下文,我們可以用這個圖形上下文在Applet中繪圖或寫入文本。

5.  applet從網頁中擷取資訊

正如應用程式可以通過命令列參數來擷取資訊一樣,通過使用param標記,applet可以從網頁中擷取資訊。

 在瀏覽器中顯示資訊:調用AppletContext介面中的showStatus()方法

請求瀏覽器顯示指定的網頁:調用AppletContext介面中的showDocument()方法。

 

6.  applet的HTML標記和屬性

n  用於定位的applet屬性

⑴    width和height:必要的屬性,以象素為單位,設定applet的寬度和高度。

⑵        align:可選的屬性,指定applet對齊的方式。

left:       把applet放在網頁左邊,後面的文本會移至applet的右邊。

right:      把applet放在網頁右邊,後面的文本會移至applet的左邊。

bottom:     把applet的底部與當前行文本底部對齊。

top:        把applet的頂部與當前行頂部對齊。

texttop:    把applet的頂部與當前行文本頂部對齊。

middle:     把applet的中部與當前行基準對齊。

absmiddle:  把applet的中部與當前行中部對齊。

baseline:   把applet的底部與當前行基準對齊。

absbottom:  把applet的底部與當前行底部對齊。

⑶vspace和hspace:可選的屬性,指定在applet上/下的象素數目(vspace)和applet兩邊的象素數目(hspace)。

   用於編碼的applet屬性

⑴    code:指定applet類檔案的名字。該名字要麼是相對於codebase,那麼是相對於當前頁面。

⑵        codebase:可選的屬性,告訴瀏覽器到哪個目錄下去尋找類檔案。

⑶ archive:可選的屬性,列出Java封存檔案、包含類檔案的檔案或者applet需要的其它資源。

(4)object:用來指定applet類檔案的另外一個方法。

⑸name:可選的屬性,頁面指令碼編寫人員希望賦予applet名字屬性,這樣,在編寫指令碼的時候,就可以用為該屬性指定的名字來代表這個applet。

附錄:AWT動畫,還是討論paint(),update(),repaint()之間的關係

更新顯示由一種被稱為AWT線程的獨立的線程來完成。這個線程可用來處理與顯示更新相關的兩種情況。

      第一種情況是顯露(exposure),它在首次顯示時,或在部分顯示已被破壞而必須重新整理時出現。顯示的破壞可能發生在任何時刻,因此,我們的程式必須能在任意時刻更新顯示。

      第二種情況是在程式重畫帶有新內容的畫面時。這種重畫可能會要求首先擦除原來的映像。

paint(Graphicsg)方法

     當組件第一次顯示,或受損的部分需要修複時被調用。除非必要,更新不會完全覆蓋整個繪圖區域,而是嚴格限制在被破壞的範圍內。

repaint()方法

     對repaint()的調用可通知系統:你想改變顯示,於是系統將調用paint()。

update(Graphicsg)方法

     repaint()實際上產生了一個調用另一方法update()的AWT線程。update方法通常清除當前的顯示並調用paint()。update()方法可以被修改,例如:為了減少閃爍可不清除顯示而直接調用paint()。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.