
Java 教程
- Java - 首頁
- Java - 概述
- Java - 歷史
- Java - 特性
- Java vs. C++
- JVM - Java虛擬機器
- Java - JDK vs JRE vs JVM
- Java - Hello World 程式
- Java - 環境搭建
- Java - 基本語法
- Java - 變數型別
- Java - 資料型別
- Java - 型別轉換
- Java - Unicode 系統
- Java - 基本運算子
- Java - 註釋
- Java - 使用者輸入
- Java - 日期與時間
Java 控制語句
- Java - 迴圈控制
- Java - 決策制定
- Java - if-else
- Java - switch
- Java - for 迴圈
- Java - for-each 迴圈
- Java - while 迴圈
- Java - do-while 迴圈
- Java - break
- Java - continue
面向物件程式設計
- Java - OOPs 概念
- Java - 物件與類
- Java - 類屬性
- Java - 類方法
- Java - 方法
- Java - 變數作用域
- Java - 建構函式
- Java - 訪問修飾符
- Java - 繼承
- Java - 聚合
- Java - 多型
- Java - 方法重寫
- Java - 方法過載
- Java - 動態繫結
- Java - 靜態繫結
- Java - 例項初始化塊
- Java - 抽象
- Java - 封裝
- Java - 介面
- Java - 包
- Java - 內部類
- Java - 靜態類
- Java - 匿名類
- Java - 單例類
- Java - 包裝類
- Java - 列舉
- Java - 列舉建構函式
- Java - 列舉字串
Java 內建類
Java 檔案處理
Java 錯誤與異常
- Java - 異常
- Java - try-catch 塊
- Java - try-with-resources
- Java - 多重catch塊
- Java - 巢狀try塊
- Java - finally 塊
- Java - throw 異常
- Java - 異常傳播
- Java - 內建異常
- Java - 自定義異常
Java 多執行緒
- Java - 多執行緒
- Java - 執行緒生命週期
- Java - 建立執行緒
- Java - 啟動執行緒
- Java - 執行緒連線
- Java - 執行緒命名
- Java - 執行緒排程器
- Java - 執行緒池
- Java - 主執行緒
- Java - 執行緒優先順序
- Java - 守護執行緒
- Java - 執行緒組
- Java - 關閉鉤子
Java 同步
Java 網路程式設計
- Java - 網路程式設計
- Java - Socket 程式設計
- Java - URL 處理
- Java - URL 類
- Java - URLConnection 類
- Java - HttpURLConnection 類
- Java - Socket 類
- Java - 泛型
Java 集合
Java 介面
Java 資料結構
Java 集合演算法
高階 Java
- Java - 命令列引數
- Java - Lambda 表示式
- Java - 傳送郵件
- Java - Applet 基礎
- Java - Javadoc 註釋
- Java - 自動裝箱和拆箱
- Java - 檔案不匹配方法
- Java - REPL (JShell)
- Java - 多版本Jar檔案
- Java - 私有介面方法
- Java - 內部類菱形運算子
- Java - 多解析度影像API
- Java - 集合工廠方法
- Java - 模組系統
- Java - Nashorn JavaScript
- Java - Optional 類
- Java - 方法引用
- Java - 函式式介面
- Java - 預設方法
- Java - Base64 編碼解碼
- Java - switch 表示式
- Java - Teeing Collectors
- Java - 微基準測試
- Java - 文字塊
- Java - 動態 CDS 歸檔
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指標異常
- Java - 打包工具
- Java - 密封類
- Java - 記錄類
- Java - 隱藏類
- Java - 模式匹配
- Java - 簡潔的數字格式化
- Java - 垃圾回收
- Java - JIT 編譯器
Java 雜項
- Java - 遞迴
- Java - 正則表示式
- Java - 序列化
- Java - 字串
- Java - Process API改進
- Java - Stream API改進
- Java - 增強的@Deprecated註解
- Java - CompletableFuture API改進
- Java - 流
- Java - 日期時間API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java APIs & 框架
Java 類引用
- Java - Scanner
- Java - 陣列
- Java - 字串
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java 有用資源
Java - Applet 基礎
一個Applet是一個在Web瀏覽器中執行的Java程式。Applet可以是一個功能齊全的Java應用程式,因為它可以使用整個Java API。
Applet和獨立Java應用程式之間存在一些重要區別,包括以下幾點:
Applet是一個擴充套件了java.applet.Applet類的Java類。
Applet不會呼叫main()方法,Applet類也不會定義main()。
Applet設計為嵌入HTML頁面。
當用戶檢視包含Applet的HTML頁面時,Applet的程式碼將下載到使用者的計算機上。
需要JVM來檢視Applet。JVM可以是Web瀏覽器的外掛或單獨的執行時環境。
使用者計算機上的JVM建立Applet類的例項,並在Applet的生命週期中呼叫各種方法。
Applet具有Web瀏覽器強制執行的嚴格安全規則。Applet的安全通常被稱為沙箱安全,將Applet比作在沙箱中玩耍的孩子,必須遵守各種規則。
Applet需要的其他類可以打包在一個Java歸檔(JAR)檔案中下載。
Java中Applet的生命週期
Applet類中的四個方法為您構建任何嚴肅的Applet提供了框架:
init - 此方法用於Applet所需的任何初始化。在處理Applet標記內的param標記後呼叫此方法。
start - 在瀏覽器呼叫init方法後自動呼叫此方法。當用戶在訪問其他頁面後返回包含Applet的頁面時,也會呼叫此方法。
stop - 當用戶離開包含Applet的頁面時,會自動呼叫此方法。因此,它可以在同一個Applet中重複呼叫。
destroy - 此方法僅在瀏覽器正常關閉時呼叫。因為Applet旨在存在於HTML頁面上,所以當用戶離開包含Applet的頁面後,通常不應留下任何資源。
paint - 在start()方法之後立即呼叫,並且在Applet需要在瀏覽器中重新繪製自身時也會呼叫。paint()方法實際上是從java.awt繼承的。
Java Applet生命週期的流程
Applet生命週期方法會自動呼叫。下圖顯示了Applet生命週期的流程。

一個簡單的Java Applet“Hello, World”
下面是一個名為HelloWorldApplet.java的簡單Applet:
import java.applet.*; import java.awt.*; public class HelloWorldApplet extends Applet { public void paint (Graphics g) { g.drawString ("Hello World", 25, 50); } }
這些匯入語句將類引入我們的applet類的作用域。
- java.applet.Applet
- java.awt.Graphics
如果沒有這些匯入語句,Java編譯器將無法識別applet類引用的Applet和Graphics類。
Applet類
每個applet都是java.applet.Applet類的擴充套件。基礎Applet類提供了一些方法,派生的Applet類可以使用這些方法從瀏覽器環境中獲取資訊和服務。
這些方法包括:
- 獲取applet引數
- 獲取包含applet的HTML檔案的網路位置
- 獲取applet類目錄的網路位置
- 在瀏覽器中列印狀態訊息
- 獲取影像
- 獲取音訊剪輯
- 播放音訊剪輯
- 調整applet大小
此外,Applet類還提供了一個介面,檢視器或瀏覽器可以透過該介面獲取有關applet的資訊並控制applet的執行。檢視器可以:
- 請求有關applet的作者、版本和版權的資訊
- 請求applet識別的引數的描述
- 初始化applet
- 銷燬applet
- 啟動applet的執行
- 停止applet的執行
Applet類為每個方法提供了預設實現。可以根據需要覆蓋這些實現。
“Hello, World” applet 現在已經完整。唯一被重寫的方法是paint方法。
呼叫Applet
可以透過在HTML檔案中嵌入指令並在applet檢視器或支援Java的瀏覽器中檢視該檔案來呼叫applet。
<applet>標籤是將applet嵌入HTML檔案的基石。以下是一個呼叫“Hello, World” applet的示例:
<html> <title>The Hello, World Applet</title> <hr> <applet code = "HelloWorldApplet.class" width = "320" height = "120"> If your browser was Java-enabled, a "Hello, World" message would appear here. </applet> <hr> </html>
注意 - 可以參考HTML Applet 標籤瞭解更多關於從HTML呼叫applet的資訊。
<applet>標籤的code屬性是必需的。它指定要執行的Applet類。width和height屬性也是必需的,用於指定applet執行的面板的初始大小。applet指令必須用</applet>標籤關閉。
如果applet需要引數,可以透過在<applet>和</applet>之間新增<param>標籤來傳遞引數的值。瀏覽器會忽略applet標籤之間的文字和其他標籤。
不支援Java的瀏覽器不會處理<applet>和</applet>。因此,在這些標籤之間出現的與applet無關的任何內容都可以在不支援Java的瀏覽器中看到。
檢視器或瀏覽器會在文件所在位置查詢已編譯的Java程式碼。要指定其他位置,請使用<applet>標籤的codebase屬性,如下所示:
<applet codebase = "https://amrood.com/applets" code = "HelloWorldApplet.class" width = "320" height = "120">
如果applet位於預設包之外的包中,則必須在code屬性中使用句點字元(.)來分隔包/類元件,指定其所屬的包。例如:
<applet = "mypackage.subpackage.TestApplet.class" width = "320" height = "120">
獲取Applet引數
以下示例演示如何使applet響應文件中指定的設定引數。此applet顯示黑白和第二種顏色的棋盤圖案。
第二種顏色和每個方格的大小可以作為文件中applet的引數來指定。
CheckerApplet在其init()方法中獲取其引數。它也可以在paint()方法中獲取其引數。但是,在applet啟動時一次獲取值並儲存設定,而不是在每次重新整理時都獲取,這樣更方便、更高效。
applet檢視器或瀏覽器會呼叫其執行的每個applet的init()方法。檢視器會在載入applet後立即呼叫init()一次。(Applet.init()實現為空操作。)覆蓋預設實現以插入自定義初始化程式碼。
Applet.getParameter()方法根據引數的名稱獲取引數(引數的值始終是字串)。如果值是數字或其他非字元資料,則必須解析該字串。
以下是CheckerApplet.java的框架:
import java.applet.*; import java.awt.*; public class CheckerApplet extends Applet { int squareSize = 50; // initialized to default size public void init() {} private void parseSquareSize (String param) {} private Color parseColor (String param) {} public void paint (Graphics g) {} }
以下是CheckerApplet的init()和私有parseSquareSize()方法:
public void init () { String squareSizeParam = getParameter ("squareSize"); parseSquareSize (squareSizeParam); String colorParam = getParameter ("color"); Color fg = parseColor (colorParam); setBackground (Color.black); setForeground (fg); } private void parseSquareSize (String param) { if (param == null) return; try { squareSize = Integer.parseInt (param); } catch (Exception e) { // Let default value remain } }
applet呼叫parseSquareSize()來解析squareSize引數。parseSquareSize()呼叫庫方法Integer.parseInt(),該方法解析字串並返回整數。每當其引數無效時,Integer.parseInt()都會丟擲異常。
因此,parseSquareSize()捕獲異常,而不是允許applet因錯誤輸入而失敗。
applet呼叫parseColor()將顏色引數解析為Color值。parseColor()執行一系列字串比較,以將引數值與預定義顏色的名稱匹配。您需要實現這些方法才能使此applet工作。
指定Applet引數
以下是一個HTML檔案的示例,其中嵌入了CheckerApplet。HTML檔案透過<param>標籤指定applet的兩個引數。
示例
<html> <title>Checkerboard Applet</title> <hr> <applet code = "CheckerApplet.class" width = "480" height = "320"> <param name = "color" value = "blue"> <param name = "squaresize" value = "30"> </applet> <hr> </html>
注意 - 引數名稱不區分大小寫。
應用程式轉換為Applet
可以輕鬆地將圖形化Java應用程式(即使用AWT的應用程式,可以使用Java程式啟動器啟動)轉換為可以嵌入網頁的applet。
以下是將應用程式轉換為applet的具體步驟。
建立一個HTML頁面,其中包含載入applet程式碼的相應標籤。
提供一個JApplet類的子類。使這個類是公共的。否則,無法載入applet。
消除應用程式中的main方法。不要為應用程式構建框架視窗。您的應用程式將在瀏覽器中顯示。
將任何初始化程式碼從框架視窗建構函式移動到applet的init方法。您不需要顯式構造applet物件。瀏覽器會為您例項化它並呼叫init方法。
刪除對setSize的呼叫;對於applet,大小調整是使用HTML檔案中的width和height引數完成的。
刪除對setDefaultCloseOperation的呼叫。applet無法關閉;它在瀏覽器退出時終止。
如果應用程式呼叫setTitle,則消除對該方法的呼叫。applet不能有標題欄。(當然,可以使用HTML標題標籤為網頁本身新增標題。)
不要呼叫setVisible(true)。applet會自動顯示。
事件處理
Applet從Container類繼承了一組事件處理方法。Container類定義了一些方法,例如processKeyEvent和processMouseEvent,用於處理特定型別的事件,然後是一個名為processEvent的總括方法。
為了對事件做出反應,applet必須重寫相應的特定於事件的方法。
示例
import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.applet.Applet; import java.awt.Graphics; public class ExampleEventHandling extends Applet implements MouseListener { StringBuffer strBuffer; public void init() { addMouseListener(this); strBuffer = new StringBuffer(); addItem("initializing the apple "); } public void start() { addItem("starting the applet "); } public void stop() { addItem("stopping the applet "); } public void destroy() { addItem("unloading the applet"); } void addItem(String word) { System.out.println(word); strBuffer.append(word); repaint(); } public void paint(Graphics g) { // Draw a Rectangle around the applet's display area. g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); // display the string inside the rectangle. g.drawString(strBuffer.toString(), 10, 20); } public void mouseEntered(MouseEvent event) { } public void mouseExited(MouseEvent event) { } public void mousePressed(MouseEvent event) { } public void mouseReleased(MouseEvent event) { } public void mouseClicked(MouseEvent event) { addItem("mouse clicked! "); } }
現在,讓我們如下呼叫此applet:
<html> <title>Event Handling</title> <hr> <applet code = "ExampleEventHandling.class" width = "300" height = "300"> </applet> <hr> </html>
最初,applet將顯示“正在初始化applet。正在啟動applet”。然後,一旦您單擊矩形內部,“滑鼠單擊”也將顯示。
顯示影像
applet可以顯示GIF、JPEG、BMP和其他格式的影像。要在applet中顯示影像,可以使用java.awt.Graphics類中的drawImage()方法。
以下是一個示例,說明顯示影像的所有步驟:
示例
import java.applet.*; import java.awt.*; import java.net.*; public class ImageDemo extends Applet { private Image image; private AppletContext context; public void init() { context = this.getAppletContext(); String imageURL = this.getParameter("image"); if(imageURL == null) { imageURL = "java.jpg"; } try { URL url = new URL(this.getDocumentBase(), imageURL); image = context.getImage(url); } catch (MalformedURLException e) { e.printStackTrace(); // Display in browser status bar context.showStatus("Could not load image!"); } } public void paint(Graphics g) { context.showStatus("Displaying image"); g.drawImage(image, 0, 0, 200, 84, null); g.drawString("www.javalicense.com", 35, 100); } }
現在,讓我們如下呼叫此applet:
<html> <title>The ImageDemo applet</title> <hr> <applet code = "ImageDemo.class" width = "300" height = "200"> <param name = "image" value = "java.jpg"> </applet> <hr> </html>
播放音訊
applet可以播放由java.applet包中的AudioClip介面表示的音訊檔案。AudioClip介面具有三種方法,包括:
public void play() - 從頭開始播放音訊剪輯一次。
public void loop() - 使音訊剪輯不斷重播。
public void stop() - 停止播放音訊剪輯。
要獲取AudioClip物件,必須呼叫Applet類的getAudioClip()方法。getAudioClip()方法會立即返回,無論URL是否解析為實際的音訊檔案。只有在嘗試播放音訊剪輯時才會下載音訊檔案。
以下是一個示例,說明播放音訊的所有步驟:
示例
import java.applet.*; import java.awt.*; import java.net.*; public class AudioDemo extends Applet { private AudioClip clip; private AppletContext context; public void init() { context = this.getAppletContext(); String audioURL = this.getParameter("audio"); if(audioURL == null) { audioURL = "default.au"; } try { URL url = new URL(this.getDocumentBase(), audioURL); clip = context.getAudioClip(url); } catch (MalformedURLException e) { e.printStackTrace(); context.showStatus("Could not load audio file!"); } } public void start() { if(clip != null) { clip.loop(); } } public void stop() { if(clip != null) { clip.stop(); } } }
現在,讓我們如下呼叫此applet:
<html> <title>The ImageDemo applet</title> <hr> <applet code = "ImageDemo.class" width = "0" height = "0"> <param name = "audio" value = "test.wav"> </applet> <hr> </html>
您可以使用您電腦上的test.wav來測試上述示例。