Applet 是執行於瀏覽器內的 Java 小應用程式,曾是早期 Web 富客戶端的主流技術。雖現代瀏覽器已移除 NPAPI 外掛支援 (Java Plugin 不再運作),但理解其架構對維護舊系統、學習 Java 元件模型仍有價值。
.class)。<applet> 或 <object>/<embed> 標籤載入。<applet code="Example.class" width="300" height="300"> 標籤。Example.class (及相依類別、資源檔)。init() → start() → paint()。stop() → destroy()。Applet Demo Welcome!
Below is an applet:
code:主類別檔名 (含套件則為 pkg/Example.class)。width/height:顯示區域像素大小。<param>:傳遞參數給 Applet,在 getParameter("img") 取得。| 方法 | 呼叫時機 | 典型用途 |
|---|---|---|
init() | 載入後、第一次顯示前 (僅一次) | 初始化 GUI、載入資源、解析參數、建立連線 |
start() | Applet 可見時 (每次顯示) | 啟動動畫執行緒、開始播放音樂、恢復計時器 |
paint(Graphics g) | 需要繪製時 | 繪製圖形、文字、影像 (AWT);Swing 應用通常不直接覆寫 |
stop() | Applet 不可見時 (切換分頁、最小化) | 暫停動畫、停止音樂、釋放非必要資源 |
destroy() | 瀏覽器關閉或卸載 Applet (僅一次) | 關閉連線、儲存狀態、釋放所有資源 |
java.lang.Object
└── java.awt.Component
└── java.awt.Container
└── java.awt.Panel
└── java.applet.Applet // AWT Applet (舊)
└── javax.swing.JApplet // Swing Applet (建議)
JApplet 提供雙緩衝、內容面板 (getContentPane())、Swing 元件支援,建議繼承 JApplet。
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class ImageApplet extends JApplet {
private Image image;
@Override
public void init() {
String imgName = getParameter("image"); // 從 HTML 取得
if (imgName == null) imgName = "default.jpg";
try {
URL url = new URL(getDocumentBase(), imgName);
image = getImage(url); // 非同步載入
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(image, 0);
tracker.waitForID(0); // 等待載入完成
} catch (Exception e) {
e.printStackTrace();
}
// 設定版面
JLabel label = new JLabel(new ImageIcon(image));
getContentPane().add(label, BorderLayout.CENTER);
}
}
jarsigner -keystore mykeystore app.jar myalias。JSObject.getWindow(this) 取得瀏覽器視窗物件。jsObject.eval("alert('Hello from Applet')") 執行 JS。jsObject.setMember("javaObj", this) 將 Applet 公開給 JS 呼叫公共方法。netscape.javascript.JSObject (位於 plugin.jar)。| 技術 | 特點 | 適用場景 |
|---|---|---|
| Java Web Start (JNLP) | 啟動獨立應用、自動更新、沙箱/全權限、已從 JDK 11 移除 | 舊版企業內部應用遷移 |
| JavaFX | 現代 UI、CSS 樣式、FXML、可打包原生安裝程式、支援 WebView 嵌入網頁 | 桌面富客戶端新開發 |
| Spring Boot + 前端框架 (React/Vue/Angular) | 前後端分離、REST API、瀏覽器原生、無外掛相依 | 所有新 Web 專案 |
| GraalVM Native Image | AOT 編譯原生執行檔、極快啟動、低記憶體 | Serverless、CLI 工具、微服務 |