三:Java之Applet
首先我要說的是Applet是一種應(yīng)用程序,它是一種由JAVA編寫的小應(yīng)用程序,通常這樣的應(yīng)用程序都像他的名字一樣,是一個非常小的程序,或許有些朋友就會問了,那么它是用來干什么的呢?JAVA程序就是JAVA程序啊,為什么要弄出個小應(yīng)用程序?
一、Applet初識
?????? Applet編程是JAVA編程語言至關(guān)重要的獨(dú)特功能,它不同與一般的JAVA程序的地方是,它可以嵌入在HTML網(wǎng)頁中,并由支持JAVA的WEB瀏覽器來動態(tài)下載解釋運(yùn)行,當(dāng)然我們所使用的IE瀏覽器3.0以上的版本號是支持JAVA小應(yīng)用程序的,有了這樣的小應(yīng)用程序,我們的網(wǎng)頁就能有一定的交互功能。
?????? 在Java Applet中,能夠?qū)崿F(xiàn)圖形繪制,字體和顏色控制,動畫和聲音的插入,人機(jī)交互及網(wǎng)絡(luò)交流等功能。 Applet還提供了名為抽象窗體工具箱(Abstract Window Toolkit, AWT)的窗體環(huán)境開發(fā)工具。 AWT利用用戶計(jì)算機(jī)的GUI元素,能夠建立標(biāo)準(zhǔn)的圖形用戶界面,如窗體、button、滾動欄等等。眼下,在網(wǎng)絡(luò)上有許多的Applet范例來生動地展現(xiàn)這些功能,讀者能夠去調(diào)閱對應(yīng)的網(wǎng)頁以觀看它們的效果。
??????? Applet的工作原理
?????? 含有Applet的網(wǎng)頁的HTML文件代碼中部帶有<applet> 和</applet>這樣一對標(biāo)記,當(dāng)支持Java的網(wǎng)絡(luò)瀏覽器遇到這對標(biāo)記時,就將下載對應(yīng)的小應(yīng)用程序代碼并在本地計(jì)算機(jī)上運(yùn)行該Applet。
?????? Applet的下載與圖形文件一樣須要一定的時間,若干秒后它才干在屏幕上顯示出來。等待的時間則取決于Applet的大小和用戶的網(wǎng)絡(luò)連接的速度。一旦下載以后,它便和本地計(jì)算機(jī)上的程序以同樣的速度執(zhí)行了。
?
?????? Applet在用戶的計(jì)算機(jī)上運(yùn)行時,還能夠下載其他的資源,如聲音文件、圖像文件或很多其他的Java代碼,有些Applet還同意用戶進(jìn)行交互式操作。但這須要反復(fù)的鏈接與下載,因此速度非常慢,這是一個亟待解決的問題,能夠想到的一個好辦法是採用類似快速緩存的技術(shù),將每次下載的文件都暫時保存在用戶的硬盤上,盡管第一次使用時花的時間比較多,但當(dāng)再次使用時,僅僅需直接從硬盤上讀取文件而無需再與Internet連接,便能夠大大提高性能了。
二、Applet和application
?? 在JAVA語言中,可以獨(dú)立執(zhí)行的程序稱為Java應(yīng)用程序(Application)。Java語言還有第二種程序——Application 程序。
JavaApplet和JavaApplication在結(jié)構(gòu)方面的主要差別表如今:
(1)執(zhí)行方式不同。Java Applet程序不能單獨(dú)執(zhí)行,它必須依附于一個用HTML語言編寫的網(wǎng)頁并嵌入當(dāng)中,通過與Java兼容的瀏覽器來控制執(zhí)行。Java Application是完整的程序,能夠獨(dú)立執(zhí)行,僅僅要有支持Java的虛擬機(jī),它就能夠獨(dú)立執(zhí)行而不須要其它文件的支持。
(2)執(zhí)行工具不同。執(zhí)行Java Applet程序的解釋器不是獨(dú)立的軟件,而是嵌在瀏覽器中作為瀏覽器軟件的一部分。Java Application程序被編譯以后,用普通的Java解釋器就能夠使其邊解釋邊執(zhí)行,而Java Applet必須通過網(wǎng)絡(luò)瀏覽器或者Applet觀察器才干執(zhí)行。
(3)程序結(jié)構(gòu)不同。每一個Java Application程序必然含有一個而且僅僅有一個main方法,程序執(zhí)行時,首先尋找main方法,并以此為入口點(diǎn)開始執(zhí)行。含有main方法的那個類,常被稱為主類,也就是說,Java Application程序都含有一個主類。而Applet程序則沒有含main方法的主類,這也正是Applet程序不能獨(dú)立執(zhí)行的原因。雖然Applet沒有含main方法的主類,但Applet一定有一個從 java.applet.Applet派生的類,它是由Java系統(tǒng)提供的。
(4)Java Applet程序能夠直接利用瀏覽器或AppletViewer提供的圖形用戶界面,而Java Application程序則必須另外書寫專用代碼來營建自己的圖形界面。
(5)受到的限制不同Java Application程序能夠設(shè)計(jì)成能進(jìn)行各種操作的程序,包含讀/寫文件的操作,可是 Java Applet 對網(wǎng)站的磁盤文件既不能進(jìn)行讀操作,也不能進(jìn)行寫 操作。然而,因?yàn)?Applet的引入,使Web頁面具有動態(tài)多媒體效果和可交互性能,這使由名為超文本、實(shí)為純文本的HTML語言編寫成的Web頁面真正具有了超文本功能,不但能夠顯示文本信息,并且還能夠有各種圖片效果和動態(tài)圖形效果,從而使頁面顯得生動漂亮;另外,Applet使Web頁面添加了button等功能,從而添加了交互性。
JavaApplet和JavaApplication在執(zhí)行方面的主要差別表如今:Java Application通常是在本地機(jī)上執(zhí)行,而Java Applet一般放在server上,它是依據(jù)本地機(jī)的請求被下載到本地機(jī),然后才在本地機(jī)上執(zhí)行。
三、基本框架
Applet的基本框架是由一套方法組成的,它們提供了瀏覽器與Applet之間的接口以及二者運(yùn)行控制的基本機(jī)制;方主要法例如以下:
1、init():
創(chuàng)建Applet時運(yùn)行,該方法僅僅被運(yùn)行一次;
當(dāng)Applet程序第一次被支持Java的瀏覽器載入時,便運(yùn)行該方法;在Applet程序的生命周期中,該方法僅僅被運(yùn)行一次,因此能夠在當(dāng)中進(jìn)行一些僅僅運(yùn)行一次的初始化操作,如:處理由瀏覽器傳遞進(jìn)來的參數(shù)、加入用戶接口組件、載入圖像和聲音文件等;Applet程序有默認(rèn)的構(gòu)造方法,但它習(xí)慣于在init()方法中運(yùn)行全部的初始化,而不是在默認(rèn)的構(gòu)造方法內(nèi);
2、start():
該方法多次運(yùn)行,當(dāng)瀏覽器從圖標(biāo)恢復(fù)成窗體,或者是返回該主頁時運(yùn)行;
系統(tǒng)在調(diào)用完init()方法之后,將自己主動調(diào)用此方法;并且每當(dāng)瀏覽器從圖標(biāo)恢復(fù)為窗體時,或者用戶離開包括該Applet程序的主頁后又再返回時,系統(tǒng)都會再運(yùn)行一遍start()方法;因此,該方法在Applet程序的生命周期中被調(diào)用多次,以啟動Applet程序的運(yùn)行,這一點(diǎn)與init()方法不同;該方法是Applet程序的主體,在當(dāng)中能夠運(yùn)行一些須要反復(fù)運(yùn)行的任務(wù)或者又一次激活一個線程,比如:開始動畫或播放聲音等;
3、stop():
該方法被多次運(yùn)行,當(dāng)瀏覽器變成圖標(biāo)時,或者是離開主頁時運(yùn)行,主要功能是停止一些耗用系統(tǒng)資源的工作;
與start()相反,當(dāng)用戶離開Applet程序所在頁面或?yàn)g覽器變成圖標(biāo)時,會自己主動調(diào)用此方法;因此,該方法在Applet的生命周期中也被多次調(diào)用;這樣使得能夠在用戶并不注意Applet程序的時候,停止一些耗用系統(tǒng)資源的工作(如中斷一個線程),以免影響系統(tǒng)的執(zhí)行速度,且并不須要去人為地去調(diào)用該方法;假設(shè)你的Applet程序中不包括動畫、聲音等程序,通常也不必重載該方法;
4、destroy():
該方法用來釋放資源,在stop()之后運(yùn)行;
瀏覽器正常關(guān)閉時,Java自己主動調(diào)用這種方法;該方法方法用于回收不論什么一個與系統(tǒng)無關(guān)的內(nèi)存資源;當(dāng)然,假設(shè)這個Applet程序仍然處于活動狀態(tài),那么Java會在調(diào)用該方法之前,先自己主動調(diào)用stop()方法;
5、其他方法:
paint(Graphicsg):該方法用于詳細(xì)的界面繪制;
update():該方法用于詳細(xì)的界面刷新;
repaint():該方法用于詳細(xì)的界面重繪;
?
四、例子程序
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相關(guān)問題
1.? Applet是什么
?Applet又稱為Java小應(yīng)用程序,是可以嵌入到一個HTML頁面中,而且可通過Web瀏覽器下載和運(yùn)行的一種Java類。? Applet不須要main()方法,由Web瀏覽器中內(nèi)嵌的Java虛擬機(jī)調(diào)用運(yùn)行。
2.? Applet的安全限制
?由于applet是從遠(yuǎn)端server上下載而且在本地執(zhí)行,所以安全性就顯得格外重要。通過限制applet在沙箱(applet的執(zhí)行環(huán)境)中執(zhí)行,保證了對本地系統(tǒng)而言applet是安全的。
? applet在沙箱中執(zhí)行時:
⑴??? 不能執(zhí)行不論什么本地可執(zhí)行程序;
⑵??? 除了存放下載的applet的server外,applet不能和其他主機(jī)進(jìn)行通信。
⑶不能對本地文件系統(tǒng)進(jìn)行讀寫。
3.? Applet的生命周期
? init():當(dāng)瀏覽器載入applet,進(jìn)行初始化的時候調(diào)用該方法。
? start():在init()方法之后調(diào)用。當(dāng)用戶從其他頁面轉(zhuǎn)到包括applet的頁面時,該方法也被調(diào)用。
? stop():在用戶離開包括applet的頁面時被調(diào)用。
?destroy():當(dāng)applet不再被使用,或?yàn)g覽器退出的時候,該方法被調(diào)用。
4.? paint()方法這個paint還是來自于AWT
?Applet本質(zhì)上是圖形方式的,我們應(yīng)該在圖形環(huán)境中繪制我們的顯示內(nèi)容。
我們能夠通過創(chuàng)建一個paint()方法在Applet的panel上畫圖。僅僅要Applet的顯示須要刷新,paint()方法就會被瀏覽器環(huán)境調(diào)用。比如,當(dāng)Applet的顯示尺寸發(fā)生變化的時候,或?yàn)g覽器窗體被最小化或被要求以圖標(biāo)方式顯示時,這樣的調(diào)用就會發(fā)生。
我們應(yīng)該編寫自己的paint()方法,以使它在不論什么時候被調(diào)用,都能正常地工作。對它的調(diào)用是異步產(chǎn)生的,且由Applet的執(zhí)行環(huán)境而不是程序來驅(qū)動。
paint()方法帶有一個參數(shù),它是java.awt.Graphics類的一個實(shí)例。這個參數(shù)總是建立該Applet的panel的圖形上下文,我們能夠用這個圖形上下文在Applet中畫圖或?qū)懭胛谋尽?/span>
5.? applet從網(wǎng)頁中獲取信息
正如應(yīng)用程序能夠通過命令行參數(shù)來獲取信息一樣,通過使用param標(biāo)記,applet能夠從網(wǎng)頁中獲取信息。
?在瀏覽器中顯示信息:調(diào)用AppletContext接口中的showStatus()方法
請求瀏覽器顯示指定的網(wǎng)頁:調(diào)用AppletContext接口中的showDocument()方法。
?
6.? applet的HTML標(biāo)記和屬性
n? 用于定位的applet屬性
⑴??? width和height:必要的屬性,以象素為單位,設(shè)定applet的寬度和高度。
⑵??????? align:可選的屬性,指定applet對齊的方式。
left:?????? 把a(bǔ)pplet放在網(wǎng)頁左邊,后面的文本會移至applet的右邊。
right:????? 把a(bǔ)pplet放在網(wǎng)頁右邊,后面的文本會移至applet的左邊。
bottom:???? 把a(bǔ)pplet的底部與當(dāng)前行文本底部對齊。
top:??????? 把a(bǔ)pplet的頂部與當(dāng)前行頂部對齊。
texttop:??? 把a(bǔ)pplet的頂部與當(dāng)前行文本頂部對齊。
middle:???? 把a(bǔ)pplet的中部與當(dāng)前行基線對齊。
absmiddle:? 把a(bǔ)pplet的中部與當(dāng)前行中部對齊。
baseline:?? 把a(bǔ)pplet的底部與當(dāng)前行基線對齊。
absbottom:? 把a(bǔ)pplet的底部與當(dāng)前行底部對齊。
⑶vspace和hspace:可選的屬性,指定在applet上/下的象素?cái)?shù)目(vspace)和applet兩邊的象素?cái)?shù)目(hspace)。
?? 用于編碼的applet屬性
⑴??? code:指定applet類文件的名字。該名字要么是相對于codebase,那么是相對于當(dāng)前頁面。
⑵?????? ?codebase:可選的屬性,告訴瀏覽器到哪個文件夾下去尋找類文件。
⑶ archive:可選的屬性,列出Java存檔文件、包括類文件的文件或者applet須要的其他資源。
(4)object:用來指定applet類文件的另外一個方法。
⑸name:可選的屬性,頁面腳本編寫人員希望賦予applet名字屬性,這樣,在編寫腳本的時候,就能夠用為該屬性指定的名字來代表這個applet。
附錄:AWT動畫,還是討論paint(),update(),repaint()之間的關(guān)系
更新顯示由一種被稱為AWT線程的獨(dú)立的線程來完畢。這個線程可用來處理與顯示更新相關(guān)的兩種情況。
????? 第一種情況是顯露(exposure),它在首次顯示時,或在部分顯示已被破壞而必須刷新時出現(xiàn)。顯示的破壞可能發(fā)生在不論什么時刻,因此,我們的程序必須能在隨意時刻更新顯示。
????? 另外一種情況是在程序重畫帶有新內(nèi)容的畫面時。這樣的重畫可能會要求首先擦除原來的圖像。
paint(Graphicsg)方法
???? 當(dāng)組件第一次顯示,或受損的部分須要修復(fù)時被調(diào)用。除非必要,更新不會全然覆蓋整個圖形區(qū)域,而是嚴(yán)格限制在被破壞的范圍內(nèi)。
repaint()方法
???? 對repaint()的調(diào)用可通知系統(tǒng):你想改變顯示,于是系統(tǒng)將調(diào)用paint()。
update(Graphicsg)方法
???? repaint()實(shí)際上產(chǎn)生了一個調(diào)用還有一方法update()的AWT線程。update方法通常清除當(dāng)前的顯示并調(diào)用paint()。update()方法能夠被改動,比如:為了降低閃爍可不清除顯示而直接調(diào)用paint()。
?
轉(zhuǎn)載于:https://www.cnblogs.com/gcczhongduan/p/4507941.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的三:Java之Applet的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql通过data目录恢复数据库
- 下一篇: Java设计模式-状态模式(State)