具有 Applet & Application 雙重身份的類 (轉)
Applet(小應用) 就用於網頁中,美化和豐富網頁的內容,由管理其生命週期(Life Cycle), 即生成(new)、初始化(init)、執行(start)、停止(stop)和銷燬(destroy)等。寫 applet,必須從 .applet.Applet 類繼承,並根據需要過載 init()(applet 被讀入時由瀏覽器,只呼叫一次,初始化 appet), start()(瀏覽器執行 applet 時呼叫), stop()(瀏覽器停止 applet 時呼叫), destroy()(applet 被銷燬時呼叫,在這裡釋放一些需要釋放的資源) 等方法。如下例是一個簡單的、什麼都不做的 applet:
/** * @(#) MyApplet.java * @author fancy */ import java.applet.*; public class MyApplet extends Applet { // ! 必須從 java.applet.Applet 繼承 ! }
Application(應用程式) 是能使用 java 命令執行的 java 應用程式,它以一個特定的 main() 方法為入口,自行管理其生命週期。寫一個 application 則必須要實現上述特定的 main() 方法。該 main() 方法必須是 public(公有)、static(靜態)、void(無返回值) 的,而且必須要求一個 String[] 型別的引數。如下例是一個簡單的,什麼都不做的 application:
/** * @(#) MyApplication.java * @author fancy */ public class MyApplication { public static void main(String[] args) { // ! 必須要有一個 pulic static void main(String[]) 方法 ! } }
簡單的介紹過 applet 和 application 的要點之後,下面我們要進入主題了——寫一個類,它即是 applet 又是 application。
根據上述 applet 和 application 的特點和要求,這個類必須從 java.applet.Applet 繼承,且實現了 public static void main(String[]) 方法,如下例,它同樣什麼都不做:
/** * @(#) MyAppletApplication.java * @author fancy */ import java.applet.*; public class MyAppletApplication extends Applet { // ! ① 從 java.applet.Applet 繼承 ! public static void main(String[] args) { // ! ② 實現了 public static void main(String[]) 方法 ! } }
上面說的各類都是什麼都不做的,如果要做什麼又該怎麼辦呢?
由於 applet 是瀏覽器管理其生命週期,即由瀏覽器生成 applet 例項和呼叫它從 java.applet.Applet 類繼承的 init()、start()、stop() 和 destroy() 等方法;而 application 是由自己管理生命週期,需要自己生成例項並呼叫相關方法。所以我們的 MyAppletApplication 類必須根據需要實現 init()、start()、stop() 和 destroy() 等方法,以便瀏覽器對其生命週期進行管理;同時,也必須在那個特定的 main() 方法中生成該類的例項(),並呼叫用於管理期生命週期的相關方法。如
/** * @(#) MyAppletApplication.java * @author fancy */ import java.applet.*; public class MyAppletApplication extends Applet { public static void main(String[] args) { MyAppletApplication app = new yAppletApplication(); // ①生成例項 ...... app.init(); // ② 初始化 ...... app.start(); // ③ 開始執行 ...... app.stop(); // ④ 停止執行 ...... app.destroy(); // ⑤ 銷燬 ...... } }
其實做到這些還是不夠的,因為一個 applet 放入網頁中,就由瀏覽器負責對其進行繪製(顯示),而在應用程式中,則需要我們使用相關部件對其進行繪製。值得慶幸的是,java.applet.Applet 從 java.awt.Compo 繼承,它就是一個 AWT 部件(Component),我們只需要將它加入到一個 Frame 或者 Window 中即可實現對它的繪製。至此,所有的問題都已經解決了,請看下例:
/** * @(#) MyAppletApplication.java * @author fancy */ import java.applet.*; import java.awt.*; import java.awt.event.*; public class MyAppletApplication extends Applet { // 從 java.applet.Applet 繼承 private List list; public void init() { // 初始化 list = new List(); add(list); list.addItem("Initializing"); System.out.println("Initializing"); } public void start() { // 開始執行時 list.addItem("Starting"); System.out.println("Starting"); } public void stop() { // 結束執行時 list.addItem("Stop"); // 這句看不到效果 System.out.println("Stopping"); } public void destroy() { // 銷燬時 list.addItem("Destroying"); // 這句看不到效果 System.out.println("Destroying"); } public static void main(String[] args) { MyAppletApplication app = new MyAppletApplication(); app.init(); app.start(); Frame frame = new Frame(); frame.add(app); frame.addWindowListener(new MyWindowListener(app)); frame.setSize(200, 150); frame.show(); } public static class MyWindowListener extends WindowAdapter { Applet applet; public MyWindowListener(Applet applet) { this.applet = applet; } public void windowClosing(WindowEvent event) { applet.stop(); applet.destroy(); System.exit(0); } } }
備註:上例中,在 stop() 和 destroy() 中為 list 新增項是看不到效果的,因為此時 applet 已經停止或者正在銷燬,它作為 application 身份時也一樣。另外,所有的 System.out.println() 語句在上例作為 applet 時也是看不到的。
注意:並不是所有的小應用程式都可能同時也是應用程式,因為有一些在小應用程式中的功能不能用於應用程式中,如 Applet.getCodeBase()、Applet.getDocumentBase() 等在 Application 中應用時就會拋異常。而一些在 Application 中可以使用的內容,由於問題,也不能在 Applet 中使用,畢竟 Applet 是要釋出在網上的,需要更高的安全性。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-977214/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java Applet與Java Application的特點JavaAPP
- 作業系統中轉換身份的另類方法(runas)(轉)作業系統
- 快遞實行雙重驗證!用官方app驗證身份才能發快遞……APP
- 身份證驗證工具類
- 中國(大陸)公民身份證類 | 工具類篇
- 重貼:MFC類中獲得其它類指標 (轉)指標
- 實現一個具有百度文庫文件轉換功能的工具類
- Android中Application類用法AndroidAPP
- 如何判斷元素具有指定的樣式類
- java和C++之單例類雙重檢查加鎖JavaC++單例
- hibernate問題:兩個物件同時具有one-to-many和one-to-one雙重關係物件
- 怎 樣 在APPLET 中 發EMAIL (轉)APPAI
- Applet直接訪問資料庫 (轉)APP資料庫
- Servlet傳送物件給Applet使用 (轉)Servlet物件APP
- Servlet&Applet通訊補遺 (轉)ServletAPP
- 關於applet寫入檔案的處理 (轉)APP
- 具有edit功能的combobox (轉)
- FC6下的application(轉)APP
- 怎樣在APPLET中發EMAIL javamail (轉)APPAIJava
- Applet間的通訊(2)--Tricks of the Java Programming Gurus (轉)APPJava
- jQuery判斷元素是否具有指定的class樣式類jQuery
- Apache基於MySQL的身份驗證(轉)ApacheMySql
- Application 類 make 方法呼叫棧流程圖APP流程圖
- Android application類相關記錄AndroidAPP
- (轉)使applet能夠訪問本地資源......APP
- 華為雲 OneAccess 應用身份管理服務,認證授權雙保駕,身份管理的選擇關鍵
- 【42】瞭解typename的雙重意義
- 英語中的“雙重否定表否定”
- Linux桌面漸成氣候 雙重成本應加考慮(轉)Linux
- Linux中為SSH啟用雙因素身份驗證Linux
- Application(EBS)開發整理(轉)APP
- javascript判斷元素是否具有指定樣式類JavaScript
- VB.NET中實現"關機/休眠/重啟/登出"的類 (轉)
- java 實現從15位~18位的身份證號碼轉換,校驗中國大陸公民身份證、香港居民身份證、澳門身份證和臺灣身份證。Java
- 雙重加密模式下的備份恢復加密模式
- devexpress report 合併列具有重複值的單元格devExpress
- 利用BCB編寫具有"磁性"特徵的視窗 (轉)特徵
- 防火牆(360天堤)雙因素身份認證解決方案防火牆