Applet 是 Java 早期「寫一次,到處運行」在瀏覽器端的具體體現。雖現代瀏覽器已移除 Java 外掛支援,但理解 Applet 生命週期、部署流程、沙箱模型,對掌握 Java 客戶端技術演進歷史、理解沙箱安全機制仍具教學價值。
import java.applet.*;
import java.awt.*;
public class HelloWorld extends Applet {
public void paint(Graphics g) {
g.drawString("HelloWorld", 25, 50); // (x=25, y=50) 繪製字串
}
}
javac HelloWorld.java
// 產生 HelloWorld.class
<html>
<body>
<applet code="HelloWorld.class" width="150" height="200">
</applet>
</body>
</html>
雙擊 HTML 檔案,瀏覽器載入 Applet,畫面顯示 "HelloWorld" 文字。
| 方法 | 觸發時機 | 典型用途 |
|---|---|---|
init() | 首次載入 | 初始化資源、解析參數、建立 UI |
start() | 頁面可見/回到頁面 | 啟動執行緒、動畫、定時器 |
paint(Graphics g) | 需重繪 (遮蓋/縮放/初次顯示) | 繪製圖形、文字、影像 |
stop() | 離開頁面/最小化 | 暫停執行緒、釋放非關鍵資源 |
destroy() | 瀏覽器關閉/卸載 Applet | 釋放所有資源、斷開連線 |
| 特性 | Applet | Application |
|---|---|---|
| 啟動入口 | 無 main(),由瀏覽器調用生命週期方法 | public static void main(String[]) |
| 安全限制 | 沙箱模型:禁止本地檔案/網路/系統屬性存取 | 無限制 (可簽名提權) |
| 部署方式 | 嵌入 HTML,瀏覽器載入 | 獨立啟動 (java -jar / java ClassName) |
| GUI 工具包 | AWT (早期) / Swing (需 Java Plugin) | AWT / Swing / JavaFX |
<applet code="ParamApplet.class" width="200" height="100">
<param name="message" value="Welcome to Java!">
<param name="fontSize" value="18">
</applet>
public class ParamApplet extends Applet {
String message;
int fontSize;
public void init() {
message = getParameter("message"); // 獲取參數
fontSize = Integer.parseInt(getParameter("fontSize"));
}
public void paint(Graphics g) {
g.setFont(new Font("SansSerif", Font.PLAIN, fontSize));
g.drawString(message, 20, 50);
}
}
HelloWorld Applet 雖簡單,卻串聯了:原始碼 → 編譯 → 位元碼 → HTML 部署 → 瀏覽器載入 → 沙箱執行 → 圖形繪製 → 生命週期管理 的完整鏈路。這段歷程見證了 Java 從「瀏覽器內的互動語言」蛻變為「企業級伺服器端霸主」的戰略轉型。今日學習者無需深耕 Applet API,但理解其「受限環境下的安全模型」、「聲明式部署」、「平台無關性」設計哲學,對理解現代容器化、沙箱隔離、WebAssembly 等技術極具啟發意義。