3. Applet
3.1 Hello World Applet
接下來使用Applet實現Hello World,借此先了解最簡單的Applet程序及使用方法。
1: import Java.awt.Graphics;
3: public class HelloWorldApplet extends Java.applet.Applet {
4:
5: public void paint(Graphics g) {
6: g.drawString("Hello world!", 5, 25);
7: }
8:}
Applet說明:
(1) 首先Applet一般是從Java.applet.Applet中繼承過來的;
(2) paint()方法必須是public,不然不能被其它程序正確調用;
(3) 由於paint方法使用了Graphics類,所以Applet需要引用Java.awt.
(4) Graphics,當然如果其它的類如果也可以實現Graphics類的功能,也可以引用之;
(5) 在Applet中沒有public static void main這個方法,所以它不能獨立執行,必須由專門的程序(如游覽器)調用執行,Applet程序被調用後,會自動執行paint方法。
這樣一個Applet就完成了,以HelloWorldApplet.java文件名保存,使用正常的編譯命令編譯之,即javac HelloWorldApplet.Java,編譯完後會生成.class文件,接下來就是在網頁中引入之個Applet小程序,這裡我們在Html中引入該Applet小程序:
(6) 這是一個簡單的Applet引用方法,在Html中使用標簽APPLET來引用Applet,code屬性指定Applet的程序名,在這個例子中引入的Applet與html文件在同一個目錄下,所以沒加路徑說明,如果不是可以使用codebase指定applet所在的路徑,路徑表示方法與Html中的一樣;
(7) 其它屬性width及時性height是Html的標准屬性
(8) 但是該Html在游覽器中執行時,並不一定能執行Applet小程序。具體原因我還沒找到,我使用的操作系統是XP,浏覽器是IE6.0,並且已安裝了Java虛擬機,已經測試過可以正常游覽有applet的網站。如果有人知道請不訪告訴我(email: [email protected]),大家共同進步。
還有另一個方法可以測試Applet,就是使用appletVIEwer命令,如果上述的Html文件名為hello.htm,那麼可以使用:
appletVIEwer hello.htm
查看html文件中引入的applet小程序,該命令會忽略Html代碼,直接執行applet代碼。
3.2 Applet參數使用方法
在Applet中可以使用標簽向Applet傳遞參數,如:
當applet執行時,這些參數就會被傳入,可以在init方法中使用getParameter()方法獲取這些傳入參數的值,如getParameter("font"),該方法返回值始終是String類型的,所以必要的時候還需進行相應的類型轉換。如果沒有相應的傳入參數,那麼getParameter()方法會返回null值。
3.3 Applet基本方法
從Java.applet.Applet繼承過來的applet會有五個基本的方法:
(1) init()方法:當applet被加載時,會首先執行init方法,該方法相當於Java application中的main,該方法只能被執行一次;
(2) start()方法:init方法執行完畢會就會自動執行start方法,start方法可以被反復執行,如一個applet被stop後,可以使用start方法重新開動它;
(3) stop()方法:停止執行applet,與start方法相對應
(4) destroy()方法:與init方法相對應;
(5) paint()方法:輸出指定內容,paint方法會被反復的調用,在applet初始化時、窗口移動時等;
(6) repaint()方法:該方法調用update方法;
(7) update()方法:該方法清空屏幕的內容後,再調用paint方法重畫;paint,repaint及update方法是實現Applet中動畫的三個主要函數,一般在update方法中調用g.clipRect方法規則paint的區域,這樣paint方法只更新指定區域的內容;
(8) 以上這些方法在必須的時候可以重載,並且不需要在我們的applet中顯示的調用,可以自動執行(當然也可以顯示調用);
3.4 Applet中的線程
在Applet中如果需要用到動畫或者後台數據處理等需要占用大量資源的功能時,最好使用線程。以下是Applet中使用線程的簡單例子:
import Java.awt.Graphics;
import Java.util.Date;
public class DigitalClock extends Java.applet.Applet
implements Runnable {
Date theDate; Thread runner;
public void start() {
if (runner == null) {
runner = new Thread(this);
runner.start();
} }
public void stop() {
if (runner != null) {
runner.stop();
runner = null;
} }
public void run() {
while (true) {
theDate = new Date();
repaint();
try { Thread.sleep(1000); }
catch (InterruptedException e) { }
} }
public void paint(Graphics g) {
g.drawString(theDate.toString(),10,50);
}}
說明:
(1) 要在applet支持線程,一般需要實現Runnable接口,所以在本例類的聲明中加了implements Runnable;
(2) 在Runable接口中定義了run()方法,當線程start時,會調用這個方法;所以需要實現該方法;
(3) 要使用線程當然需要實例化類Thread(Thread是屬於Java.lang包):Thread runner = new Thread(this),這裡的初始化參數this指定的applet對象;
(4) 接下來在applet的start方法中調用runner.start()方法開始創建線程,線程創建完後,運行run方法;
(5) 在run方法中實現真正要實現的內容,本例修改了theDate的值後,調用repaint方法,該方法的調用觸發了paint方法的執行;
(6) 在stop方法中結束線程的運行。