什麼是 Java Applet?
- 以 Java 語言編寫的小型應用程式,嵌入 HTML 頁面
- 由支援 Java 的瀏覽器 (舊版 IE/Netscape) 或
appletviewer 下載執行
- 客戶端執行,不受網路頻寬限制,提供豐富互動/多媒體效果
- 包含 Applet 的頁面稱為「Java-powered 頁面」
HTML 部署標籤:<applet> 必備屬性
<applet
code="AppletClassName.class" <!-- 位元碼檔名 -->
codebase="URL" <!-- 程式碼基底路徑 (相對/絕對) -->
width="300" height="200" <!-- 顯示區域尺寸 (像素) -->
name="instanceName" <!-- 實例名稱 (多 Applet 通訊用) -->
align="middle" <!-- 對齊: top/middle/bottom -->
vspace="50" hspace="25" <-- 垂直/水平邊距 -->
alt="替代文字" <-- 不支援 Java 時顯示 -->
>
<param name="參數名" value="參數值"> <!-- 傳遞參數 -->
</applet>
Applet 核心類別:java.applet.Applet
所有 Applet 必須繼承 Applet (間接繼承 Panel → Container → Component)。
生命週期四大方法 (模板方法模式)
| 方法 | 觸發時機 | 執行次數 | 典型用途 |
init() | Applet 首次載入 | 一次 | 初始化:讀參數、建立 UI 組件、啟動資源 |
start() | init() 後、頁面重新顯示 | 多次 | 啟動動畫執行緒、恢復音樂、重新連線 |
stop() | 離開頁面/最小化 | 多次 | 暫停執行緒、停止音樂、釋放非關鍵資源 |
destroy() | 瀏覽器關閉/卸載 | 一次 | 釋放非記憶體資源 (原生連線、檔案控制代碼) |
關鍵差異:init() 僅一次,start()/stop() 隨頁面可見性多次觸發。
常用實用方法
| 方法 | 功能 |
getParameter(String name) | 取得 HTML <param> 值 |
getCodeBase() | 取得 Applet 程式碼 URL (載入資源基準) |
getDocumentBase() | 取得 HTML 文件 URL |
getImage(URL, String) | 載入圖片 (非阻塞) |
getAudioClip(URL, String) | 載入聲音 |
showStatus(String) | 瀏覽器狀態列顯示訊息 |
resize(int, int) | 調整 Applet 顯示區域 |
getAppletContext() | 取得瀏覽器環境 (互訪其他 Applet、開啟連結) |
完整開發流程範例:HelloWorld
1. 原始碼 HelloWorld.java
import java.awt.*;
import java.applet.*;
public class HelloWorld extends Applet {
public void paint(Graphics g) {
g.drawString("Hello World!", 5, 35);
}
}
2. 編譯
javac HelloWorld.java
→ 產生 HelloWorld.class
3. HTML 頁面 HelloWorld.html
<HTML>
<TITLE>HelloWorld Applet</TITLE>
<APPLET CODE="HelloWorld.class" WIDTH=200 HEIGHT=100>
</APPLET>
</HTML>
4. 執行方式
appletviewer HelloWorld.html (開發測試)
- 瀏覽器開啟
file:///path/HelloWorld.html (需支援 Java 外掛)
參數傳遞機制:提升通用性
HTML 傳參:<param name="company" value="Acme Inc.">
Java 取參:String company = getParameter("company");
優點:修改 HTML 即可改變行為,無需重新編譯 Java 代碼。
Applet 限制與沙箱模型 (安全性)
- 預設無法讀寫本地檔案、啟動程式、連接非來源主機、載入本地庫
- 簽名 Applet (JAR 簽名 + 用戶授信) 可突破部分限制
- Java 2 Security: 細粒度權限控制 (
policy 檔案)
現代替代技術 (Applet 已被淘汰)
Java 9 標記棄用,Java 11 移除,瀏覽器全面停支援。