




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java程序設(shè)計(jì)之網(wǎng)絡(luò)編程,重慶大學(xué)計(jì)算機(jī)學(xué)院 電子郵件:,教學(xué)課件,第12章 Applet應(yīng)用程序,Java應(yīng)用程序可以分為三大類:Java Application、Java Applet以及Servlet。Java Application是可以獨(dú)立運(yùn)行的Java程序,我們?cè)谇懊嫔婕暗膉ava程序大部分都是Java Application。相對(duì)于Java Application而言,Java Applet是不能獨(dú)立運(yùn)行,它只能嵌入到瀏覽器中運(yùn)行。在HTML文件中,通過(guò)一個(gè)特定的HTML標(biāo)簽引用Java Applet程序,從而將Applet文件嵌入到網(wǎng)頁(yè)文件中。當(dāng)讀者訪問(wèn)嵌有Applet的網(wǎng)頁(yè)
2、時(shí),瀏覽器會(huì)自動(dòng)從Web服務(wù)器上下載Applet程序,并在本機(jī)運(yùn)行的Java虛擬機(jī)上運(yùn)行。,12.1 Applet程序設(shè)計(jì)基礎(chǔ) 12.2 java.applet包 。 12.3 Applet中的多媒體應(yīng)用 12.4 Applet中的鼠標(biāo)和鍵盤(pán)事件,主要內(nèi)容:,12.1 Applet程序設(shè)計(jì)基礎(chǔ),12.1.1加載Applet Applet是Java語(yǔ)言的又一應(yīng)用形式。它沒(méi)有main方法,因而不能由解釋器直接解釋執(zhí)行。 為了運(yùn)行它,我們需要把它放進(jìn)Web頁(yè)面。當(dāng)這個(gè)頁(yè)面在瀏覽器上顯示時(shí),Applet就在頁(yè)面中指定的一部分區(qū)域內(nèi)顯示其運(yùn)行結(jié)果。,12.1.2 Applet的安全性限制,Applet程
3、序的執(zhí)行需要從Internet上將Applet的偽代碼下載到本地系統(tǒng)運(yùn)行,因此Applet在給人們帶來(lái)好處的同時(shí),也帶來(lái)了潛在的安全隱患。 為了防止這樣的問(wèn)題出現(xiàn),在缺省的情況下,大多數(shù)瀏覽器在Applet安全方面受到諸多的限制,幾乎不能對(duì)系統(tǒng)進(jìn)行任何“讀”或“寫(xiě)”的操作。,不允許Applet運(yùn)行時(shí)執(zhí)行另一程序。 不允許Applet訪問(wèn)本地文件系統(tǒng)。 Applet不能執(zhí)行任何本地計(jì)算機(jī)上的程序。 不允許Applet嘗試打開(kāi)除提供Applet的服務(wù)器之外的任何系統(tǒng)的Socket。 不允許Applet訪問(wèn)用戶名、電子郵件地址等與本地系統(tǒng)有關(guān)的信息。 對(duì)于Applet而言,Java環(huán)境中的某些標(biāo)準(zhǔn)系
4、統(tǒng)屬性是只讀的。,Applet不能創(chuàng)建或裝載Applet的機(jī)器的網(wǎng)絡(luò)連接。 Applet不能充當(dāng)網(wǎng)絡(luò)服務(wù)器,監(jiān)聽(tīng)或接收來(lái)自遠(yuǎn)程系統(tǒng)的連接請(qǐng)求。 不允許Applet裝載動(dòng)態(tài)庫(kù)或定義本地方法調(diào)用。 Applet不能操縱不在自己線程組中的任何線程。 Applet不能關(guān)閉JVM。,12.1.3 Applet的生命周期,Applet由運(yùn)行時(shí)系統(tǒng)來(lái)構(gòu)造。當(dāng)它所在的頁(yè)面被瀏覽器裝入后,Applet就出生了。 這時(shí)系統(tǒng)自動(dòng)調(diào)用init()方法,進(jìn)行一些必要的初始化工作。 接著,系統(tǒng)將調(diào)用start()方法啟動(dòng)Applet的執(zhí)行。 當(dāng)瀏覽器切換到別的頁(yè)面時(shí),stop()被調(diào)用,以終止Applet的執(zhí)行。,假如瀏
5、覽器又切換回Applet所在頁(yè)面,那么運(yùn)行時(shí)系統(tǒng)將從調(diào)用start()方法開(kāi)始Applet的又一次運(yùn)行。 當(dāng)瀏覽器關(guān)掉時(shí),Applet走到了它一生的終點(diǎn)。 系統(tǒng)將先調(diào)用stop()停止它的執(zhí)行,然后用destroy( )方法來(lái)完成資源回收等收尾工作。 如果瀏覽器重載頁(yè)面,就會(huì)先令A(yù)pplet死亡(依次調(diào)用stop()和destroy(),然后裝入頁(yè)面(調(diào)用init(),開(kāi)始Applet的又一次生命。,Applet生周期,1init(),當(dāng)applet被加載時(shí),會(huì)首先執(zhí)行init方法,該方法相當(dāng)于Application程序中的main,該方法只能被執(zhí)行一次。Applet可用這個(gè)方法來(lái)初始化數(shù)據(jù)的
6、值,比如設(shè)置全局變量,初始化對(duì)象等等。該方法只在Applet首次裝入時(shí)被調(diào)用,并且在調(diào)用start()之前執(zhí)行完成。 2start() init方法執(zhí)行完畢會(huì)就會(huì)自動(dòng)執(zhí)行start方法,start方法可以被反復(fù)執(zhí)行,如一個(gè)applet被stop后,可以使用start方法重新開(kāi)動(dòng)。該方法的執(zhí)行使得Applet成為“活動(dòng)”的。無(wú)論Applet何時(shí)成為可見(jiàn)的,它同樣要執(zhí)行一次,如:當(dāng)瀏覽器在被圖標(biāo)化后又恢復(fù)時(shí),或者當(dāng)瀏覽器在鏈接到另一個(gè)URL后又返回含有這個(gè)Applet的頁(yè)面時(shí)。,3stop(),stop方法是在Applet成為不可見(jiàn)時(shí)被調(diào)用。該方法在當(dāng)用戶不注意Applet的時(shí)候,停止一些資源的工
7、作以免影響系統(tǒng)運(yùn)行效率。比如:在瀏覽器被圖標(biāo)化或鏈接到另一個(gè)URL時(shí),Applet會(huì)調(diào)用該方法使動(dòng)畫(huà)停止。 4Destroy() 當(dāng)關(guān)閉包含Applet的瀏覽器窗口時(shí),會(huì)調(diào)用該方法,以銷毀Applet對(duì)象,釋放對(duì)象占用的資源。,12.2 java.applet包,12.2.1 Applet類的繼承關(guān)系 Java.applet.Applet類實(shí)際上是java.awt.Panel的子類。,這種層次關(guān)系顯示,一個(gè)Applet可直接用作一個(gè)AWT布局的起始點(diǎn)。因?yàn)锳pplet是 Panel的子類,所以它有一個(gè)缺省的流(flow)布局管理器。 Component,Container和Panel類的方法被
8、Applet類繼承了下來(lái)。而與Panel不同的是,Applet類是一個(gè)可以運(yùn)行的類,創(chuàng)建一個(gè)Applet類就相當(dāng)于創(chuàng)建一個(gè)Applet應(yīng)用程序。,12.2.2 Applet類的方法,1有關(guān)運(yùn)行環(huán)境和Applet狀態(tài)的方法 public AppletContext getAppletContext():用以得到與Applet有關(guān)的上下文(AppletContext)對(duì)象。此方法與訪問(wèn)Applet的執(zhí)行環(huán)境有關(guān)。 public void resize(int width,int height):重新設(shè)置Applet所在區(qū)域的大小。該方法重寫(xiě)了Component類的resize()方法。它還有一個(gè)重
9、載方法。 public void showStatus(String msg):用Applet的上下文(如執(zhí)行它的瀏覽器)來(lái)顯示Applet的狀態(tài)信息。,public final void setStub(Applet Stub):用來(lái)設(shè)置與Applet相關(guān)的“存根”AppletStub。除非你要構(gòu)造自己的Applet瀏覽器,否則不要使用它。由final修飾符可知這個(gè)方法是不可重寫(xiě)的。 public Locale getLocale():Local是java.util包中的一個(gè)類,封裝與國(guó)家、語(yǔ)言等相等的地域信息。這個(gè)方法用于獲取與Appet相關(guān)的Locale對(duì)象。 public boolea
10、n isActive():判斷Applet是否處于被激活的狀態(tài)。,2用于操作聲音、圖像資源的方法,public Image getImage(URL url):從給定的URL獲取Image對(duì)象,用以處理圖像。 public Image getImage(URL url,String name) 獲取指定URL和名字的Image對(duì)象。 public AudioClip getAudioClip(URL url):從給定的URL獲取AudioClip對(duì)象。,public AudioClip getAudioClip(URL url,String name):獲取指定URL和名字的AudioClip
11、對(duì)象,這兩個(gè)方法用以處理聲音。 public void play(URL url):用于演奏指定URL的AudioClip對(duì)象。 public void play(URL url,String name):用于演奏指定URL和名稱的AudioClip對(duì)象。,3與生命周期有關(guān)的方法,public void init():做初始化工作,在Applet被裝入時(shí)調(diào)用。 public void start():?jiǎn)?dòng)Applet的運(yùn)行。 public void stop():停止Applet運(yùn)行時(shí)被自動(dòng)調(diào)用。 public void destroy():當(dāng)Applet消亡時(shí)被自動(dòng)調(diào)用,一般用來(lái)做回收資源等
12、收尾工作。,4與Applet所在頁(yè)面有關(guān)的方法,public URL getCodeBase():返回Applet所在的文檔的URL。 public URL getDocumentBase():返回Applet所在的HTML文檔的URL。 public String getAppletInfo():返回一個(gè)String對(duì)象,其中包含Applet的版。本,拷貝權(quán)、作者等信息。 public String getParameterInfo():描述Applet參數(shù)的名字、類型和描述 public String getParameter(String):得到在HTML文檔中傳給Applet的參數(shù)。,
13、12.2.4 HTML和Applet, alternateHTML ,參數(shù)含義,archive = archiveList code = appletFile.class width = pixels height = pixels codebase = codebaseURL alt = alternateText name = appletInstanceName align = alignment vspace = pixels hspace = pixels ,【例121】HelloWord程序,HTML源文件: ,Applet源程序,import java.awt.*; import
14、 java.applet.*; public class helloworld extends Applet private String title; private int size; private int color; public void init() title=Hello World!; size=Integer.parseInt(getParameter(size); /獲得字體大小 color=Integer.parseInt(getParameter(color); /獲得字體顏色 ,public void paint(Graphics g) Color c=new Co
15、lor(color); g.setColor(c); Font f=new Font(,1,size); g.setFont(f); g.drawString(title,100,80); ,AWT繪圖,除了基本的生命周期外,Applet還有與其顯示有關(guān)的一些重要的方法。這些方法的聲明和文檔在AWT組件類中。使用AWT做顯示處理時(shí)遵循正確的模型是非常重要的。 更新顯示由一種被稱為AWT線程的獨(dú)立的線程來(lái)完成。 這個(gè)線程可用來(lái)處理與顯示更新相關(guān)的兩種情況。 第一種情況是顯露(exposure),它或在首次顯示時(shí),或在部分顯示已被破壞而必須刷新時(shí)出現(xiàn)。顯示的破壞可能發(fā)生在任何時(shí)刻,因此,你的程序必
16、須能在任意時(shí)刻更新顯示。 第二種情況是在程序重畫(huà)帶有新內(nèi)容的畫(huà)面時(shí)。這種重畫(huà)可能會(huì)要求首先擦除原來(lái)的圖像。,與繪圖有關(guān)的線程及方法,paint(Graphics g)方法 顯示處理自動(dòng)地發(fā)生,且導(dǎo)致對(duì)paint()方法的一次調(diào)用。一種Graphics類的被稱為裁剪矩形的設(shè)備常用于對(duì)paint()方法進(jìn)行優(yōu)化。除非必要,更新不會(huì)完全覆蓋整個(gè)圖形區(qū)域,而是嚴(yán)格限制在被破壞的范圍內(nèi)。 repaint()方法 對(duì)repaint()的調(diào)用可通知系統(tǒng):你想改變顯示,于是系統(tǒng)將調(diào)用paint()。 update(Graphics g)方法 repaint()實(shí)際上產(chǎn)生了一個(gè)調(diào)用另一方法update()的AW
17、T線程。update方法通常清除當(dāng)前的顯示并調(diào)用paint()。update()方法可以被修改,如:為了減少閃爍可不清除顯示而直接調(diào)用paint()。 法的交互 下面的框圖描述了paint(),update()和repaint()方法間的內(nèi)在關(guān)系,12.2.4 Appletviewer,為了簡(jiǎn)化和加速開(kāi)發(fā)過(guò)程,JDK附帶了一個(gè)專為查看Applet而設(shè)計(jì)但不支持HTML頁(yè)面查看的工具。這個(gè)工具就是Appletviewer,它使你不必使用Web瀏覽器即可運(yùn)行Applet的一個(gè)Java應(yīng)用程序。,12.2.5 Applet的顯示,除了基本的生命周期外,Applet還有與其顯示有關(guān)的一些重要的方法,包
18、括:paint()、repaint()和update()方法。這些方法是Applet顯示和刷新的重要工具,它們的聲明和文檔在AWT組件類中。Applet的更新顯示都是由AWT線程來(lái)獨(dú)立控制完成。,12.3 Applet中的多媒體應(yīng)用,12.3.1URL URL(Uniform Resoure Locator:統(tǒng)一資源定位器)是Internet上各種資源的定位地址。在Java語(yǔ)言中URL類封裝了多個(gè)URL,一般有兩種方法創(chuàng)建一個(gè)URL對(duì)象: URL u=new URL(“ URL data=new URL(u,”data/planets.dat”);,第一種方法向URL構(gòu)造器傳遞一個(gè)字符串,且指
19、定了整個(gè)資源的名稱,因此稱為絕對(duì)URL。第二種方法可以產(chǎn)生相對(duì)URL,它指定的planets.dat文件位于URL對(duì)象u的data子目錄中。 在Applet類中有兩個(gè)方法可以獲得對(duì)象的URL: public URL getCodeBase():返回Applet所在的文檔的URL。 public URL getDocumentBase():返回Applet所在的HTML文檔的URL。,12.3.2加載圖像,Applet類中,加載圖像文件的方法有兩個(gè): public Image getImage(URL url):從給定的URL獲取Image對(duì)象,用以處理圖像。 public Image getI
20、mage(URL url, String name) 獲取指定URL和名字的Image對(duì)象。,Graphics類中顯示圖像文件的方法也有兩個(gè): drawImage(Image img, int x, int y, ImageObserver obs):在指定的位置顯示圖像對(duì)象img。 drawImage(Image img, int x, int y, int width, int height, ImageObserver obs):將圖像對(duì)象img縮小或放大到指定大小,并在指定位置顯示圖像。,【例12-2】加載并顯示圖像,Applet源程序 import java.awt.*; impor
21、t java.applet.*; public class display_image extends Applet Image labmag; public void init() labmag=getImage(getDocumentBase(),image.jpg); public void paint(Graphics g) g.drawImage (labmag,0,0,this); g.drawImage (labmag,0,150,200,100,this); ,HTML源程序 ,12.3.3播放聲音,播放一段聲音文件的最簡(jiǎn)單的方式是通過(guò)Applet的play方法: public
22、 void play(URL url):用于演奏指定URL的AudioClip對(duì)象。 public void play(URL url,String name):用于演奏指定URL和名稱的AudioClip對(duì)象。,【例123】用play方法播放聲音文件,import java.awt.Graphics; import java.applet.Applet; public class play_audio extends Applet public void paint(Graphics g) g.drawString(Audio Test, 25, 25); play(getDocumentB
23、ase(),audio.wav); ,AudioClip類,1)裝入一段Audio Clip 要轉(zhuǎn)載一個(gè)聲音文件,必須先通過(guò)指定的聲音文件生成一個(gè)AudioClip對(duì)象。在Applet中有兩種方法可以獲取聲音文件并生成一個(gè)AudioClip對(duì)象: public AudioClip getAudioClip(URL url):從給定的URL獲取AudioClip對(duì)象。 public AudioClip getAudioClip(URL url,String name):獲取指定URL和名字的AudioClip對(duì)象,這兩個(gè)方法用以處理聲音。,2)播放AudioClip對(duì)象 一旦一段clip被裝載,
24、可選擇與之相關(guān)的三個(gè)方法之一:play,loop,或stop play():將已裝入的AudioClip對(duì)象播放一遍。 loop():?jiǎn)?dòng)AudioClip對(duì)象的播放并不斷循環(huán)(自動(dòng)重放)。 stop(),【例124】循環(huán)播放聲音,import java.awt.Graphics; import java.applet.*; public class loop_audio extends Applet AudioClip sound; public void init() sound = getAudioClip(getDocumentBase(), audio.wav); public vo
25、id paint(Graphics g) g.drawString(Loop Audio Test, 25, 25); public void start() sound.loop(); public void stop() sound.stop(); ,12.5 Applet編程實(shí)例【例128】一個(gè)通過(guò)Applet顯示時(shí)鐘的例子,import java.awt.*; import java.applet.*; import java.util.Date; /這是Java中的低級(jí)實(shí)用工具包,可以處理時(shí)間等內(nèi)容。 public class display_clock extends Applet
26、 implements Runnable /有線程運(yùn)行接口 Date timenow; /Date是一個(gè)時(shí)間定義與創(chuàng)建函數(shù). Clock myClock; /用戶自定義的類 Thread clockthread=null; /設(shè)置一個(gè)線程 public void start() /線程開(kāi)始的類 if (clockthread=null) /如果線程為空,則 clockthread=new Thread (this); /開(kāi)始新的線程 clockthread.start(); /開(kāi)始,public void stop() /終止線程 clockthread.stop(); clockthread
27、=null; public void run() /運(yùn)行線程 while(true) /一個(gè)死循環(huán),條件永遠(yuǎn)都是真的。 repaint(); /重新繪制界面 tryThread.sleep(1000); /讓線程沉睡1000毫秒, catch(InterruptedException e) /捕獲異常(也就是錯(cuò)誤) public void paint(Graphics g) timenow=new Date(); /新的時(shí)間的獲得 myClock=new Clock(timenow.getHours (), timenow.getMinutes (), timenow.getSeconds (); g.drawString(timenow.toString(),25,240);/將它打印出來(lái)! myClock.show(g,100,100,100); /使面板顯示 ,class Clock Cl
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 地鐵上學(xué)生做數(shù)學(xué)試卷
- 富平縣中考二模數(shù)學(xué)試卷
- 肌膚護(hù)理流程課件
- 福州中學(xué)半期考數(shù)學(xué)試卷
- 輔仁高級(jí)中學(xué)數(shù)學(xué)試卷
- 高青一中數(shù)學(xué)試卷
- 肉牛養(yǎng)殖技術(shù)課件
- 2024年11月河南省內(nèi)黃興福村鎮(zhèn)銀行招考9名工作人員筆試歷年參考題庫(kù)附帶答案詳解
- 黔南貴定縣“雁歸興貴?才聚麥溪”人才引進(jìn)考試真題2024
- 典中點(diǎn)蘇教數(shù)學(xué)試卷
- 2025年供應(yīng)鏈管理專業(yè)考試題及答案
- 2023衡水市事業(yè)單位考試歷年真題
- 金鏟鏟教學(xué)課件
- 2022包頭職業(yè)技術(shù)學(xué)院招聘筆試真題及答案詳解1套
- 2025年湖北省工業(yè)建筑集團(tuán)有限公司人員招聘筆試模擬試題附答案詳解
- 能源站運(yùn)營(yíng)管理制度
- 2025年高考真題-化學(xué)(廣東卷) 含答案
- 人教版五年級(jí)數(shù)學(xué)下冊(cè)質(zhì)量分析報(bào)告
- 竹制品企業(yè)可行性報(bào)告
- 四川省金釩科技有限責(zé)任公司巴洞鐵礦開(kāi)采工程環(huán)評(píng)報(bào)告
- (2025)時(shí)政熱點(diǎn)必考題庫(kù)(附答案)
評(píng)論
0/150
提交評(píng)論