首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 應用程式中實現聲音提示的完整指南

     編輯:Java 相關知識

前言

Java 作為網路程式語言,在 Applet 中透過 java.applet.AudioClip 輕鬆播放聲音。但若在一般 Application(獨立應用程式)中想發出提示音,卻無法直接使用 AudioClip,因其僅限於 Applet 環境。本文介紹如何在 Application 中利用 java.awt.Toolkit.beep() 觸發系統喇叭發聲,並附上完整的 Client/Server 範例程式碼。

為什麼 Application 不能用 AudioClip?

  • AudioClip 位於 java.applet 套件,專為 Applet 設計。
  • play() 方法僅在 Applet 執行環境中可被呼叫,Application 中無法運作。
  • 嘗試寫成「既是 Applet 又是 Application」的混合類別也無效,因底層實作限制。

解決方案:Toolkit.beep()

java.awt.Toolkit 為抽象類別,提供 getDefaultToolkit() 取得具體實作,再呼叫 beep() 即可觸發系統喇叭發出提示音。

Toolkit.getDefaultToolkit().beep();

完整範例:Server/Client 聊天系統與聲音提示

Server 端

import java.util.*;
import java.io.*;
import java.net.*;
import java.awt.*;

public class ServerT {
    public static void main(String[] args) {
        Server server = new Server(8001);
        // ... 處理客戶端連線與訊息收發 ...
    }
}

class Server {
    private ServerSocket server;
    private Socket socket;
    public DataInputStream in;
    public PrintStream out;

    public Server(int port) {
        try {
            server = new ServerSocket(port);
            System.out.println("Server started on port " + port);
            socket = server.accept(); // 等待客戶端連線

            // 連線成功時發出 260 次提示音
            for (int i = 0; i < 260; i++) {
                Toolkit.getDefaultToolkit().beep();
            }
            System.out.println("Server is ready!");

            in = new DataInputStream(socket.getInputStream());
            out = new PrintStream(socket.getOutputStream());
            out.println("We connect in " + new Date());
        } catch (IOException e) {
            System.out.println("Server failed: " + e);
        }
    }
}

Client 端

import java.util.*;
import java.io.*;
import java.net.*;

public class ClientT {
    public static void main(String[] args) {
        // 請將 IP 改為實際 Server IP
        Client client = new Client("127.0.0.1", 8001);
        // ... 訊息收發迴圈 ...
    }
}

class Client {
    public DataInputStream in;
    public PrintStream out;
    private Socket client;

    public Client(String host, int port) {
        try {
            client = new Socket(host, port);
            out = new PrintStream(client.getOutputStream());
            in = new DataInputStream(client.getInputStream());
            System.out.println("Client connected to " + client);
        } catch (IOException e) {
            System.out.println("Connection failed: " + e);
            System.exit(1);
        }
    }
}

執行說明

  1. 先啟動 ServerT,等待連線。
  2. 修改 ClientT 中的 IP 位址為 Server 實際 IP(本機測試可用 127.0.0.1)。
  3. 啟動 ClientT,Server 端將收到連線並發出連續提示音。

注意事項

  • beep() 僅觸發系統預設提示音,無法自訂音效檔案。
  • 若需播放自訂音效(如 .wav, .au),可考慮 javax.sound.sampled 套件(Java Sound API),支援 Application 環境。
  • 頻繁呼叫 beep() 可能造成使用者不適,建議僅於關鍵事件(如新連線、錯誤警示)使用。

結語

在 Java Application 中加入聲音提示並不複雜,善用 Toolkit.beep() 即可滿足大多數簡單提醒需求。若需要豐富音效播放,請進一步探索 Java Sound API。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved