觀察 Applet 框架方法的實際運作相當有趣。本例重點展示 init()、start() 和 stop() 三個核心方法,因為 paint() 和 destroy() 相對簡單,較易掌握。下列程式碼會追蹤這些方法的呼叫次數,並透過 paint() 將計數顯示於畫布上:
//: Applet3.java
// Shows init(), start() and stop() activities
import java.awt.*;
import java.applet.*;
public class Applet3 extends Applet {
String s;
int inits = 0;
int starts = 0;
int stops = 0;
public void init() {
inits++;
}
public void start() {
starts++;
}
public void stop() {
stops++;
}
public void paint(Graphics g) {
s = "inits: " + inits + ", starts: " + starts + ", stops: " + stops;
g.drawString(s, 10, 10);
}
} ///:~
正常情況下,覆寫方法時需檢查是否需要呼叫父類版本(如 super.init())。然而,Applet 文件明確指出 init()、start() 和 stop() 在 Applet 基類中無實質功能,因此此處無需呼叫它們。
實驗時會發現:若最小化瀏覽器視窗或被其他視窗遮蓋,stop() 和 start() 不會被頻繁呼叫(此行為隨實作而異,可對比瀏覽器與 Applet Viewer 的差異)。這兩個方法僅在切換至其他網頁後返回包含 Applet 的頁面時才會被觸發。