三:Java之Applet
首先我要說的是Applet是一種應用程序,它是一種由JAVA編寫的小應用程序,通常這樣的應用程序都像他的名字一樣,是一個非常小的程序,或許有些朋友就會問了,那么它是用來干什么的呢?JAVA程序就是JAVA程序啊,為什么要弄出個小應用程序?
一、Applet初識
?????? Applet編程是JAVA編程語言至關重要的獨特功能,它不同與一般的JAVA程序的地方是,它可以嵌入在HTML網頁中,并由支持JAVA的WEB瀏覽器來動態下載解釋運行,當然我們所使用的IE瀏覽器3.0以上的版本號是支持JAVA小應用程序的,有了這樣的小應用程序,我們的網頁就能有一定的交互功能。
?????? 在Java Applet中,能夠實現圖形繪制,字體和顏色控制,動畫和聲音的插入,人機交互及網絡交流等功能。 Applet還提供了名為抽象窗體工具箱(Abstract Window Toolkit, AWT)的窗體環境開發工具。 AWT利用用戶計算機的GUI元素,能夠建立標準的圖形用戶界面,如窗體、button、滾動欄等等。眼下,在網絡上有許多的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頁面添加了button等功能,從而添加了交互性。
JavaApplet和JavaApplication在執行方面的主要差別表如今:Java Application通常是在本地機上執行,而Java Applet一般放在server上,它是依據本地機的請求被下載到本地機,然后才在本地機上執行。
三、基本框架
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是從遠端server上下載而且在本地執行,所以安全性就顯得格外重要。通過限制applet在沙箱(applet的執行環境)中執行,保證了對本地系統而言applet是安全的。
? applet在沙箱中執行時:
⑴??? 不能執行不論什么本地可執行程序;
⑵??? 除了存放下載的applet的server外,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()。
?
轉載于:https://www.cnblogs.com/gcczhongduan/p/4507941.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的三:Java之Applet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql通过data目录恢复数据库
- 下一篇: Java设计模式-状态模式(State)