Java作為一種網絡編程語言,在浏覽器中即可以進行動畫演示,也可以播放聲音。在人機 的交互過程中,為了加強效果或起到提示的作用,需要加入聲音。
Java的包java.applet中有AudioClip接口,此接口封裝有關聲音片斷的一些常用方法。用 法如下:
AudioClip audio;
audio=getAudioClip(getCodeBase(),"Hi.au");
audio.play();
第一行生成接口AudioClip的一個變量,第二行利用此變量取得聲音文件Hi.au,此文件與 程序本身在同一目錄下,getCodeBase()方法是用來取得Applet的class文件的URL地址。第三 行是播放聲音文件。在Applet中利用此用法可在浏覽器中發出聲音。那麼,在Application中 是否也可以用此方法來發出聲音呢?不可以。因為接口AudioClip是在包java.applet中,而 此包只適用於Applet。是否可以用其它方法來實現呢?我們可以利用1中的技巧來編寫一個即 是Applet又是Application的程序試試。結果,還是不行。這是因為play()方法只能在Applet 中實現,對於Applicationplay()方法是不能夠被調用的。
那麼,如何在Application中實現發聲提示呢?
記得VB中有beep語句來使系統發聲器(SystemSpeaker)發聲,那麼,Java中也應有類似的 方法。
在Java的java.awt.Toolkit類中有方法beep()是來實現這一功能的。類Toolkit是抽象類 ,它是實現AWT的所有工具的父類。Java中的抽象類是不能夠實例化的,但是一般地,抽象類 可以生成變量,然後利用抽象類中的某一方法來取得此類的替代品。在Toolkit中是利用 getDefaultToolkit()方法來實現的。現在給出一個實例:
這是一個客戶機/服務器的Application。當服務器運行時如果有客戶機與服務器相連,則 服務器會自動發聲警報提示服務器端的用戶有客戶要與自己進行對話。
----程序如下:
服務器:
import java.util.*; import java.io.*; import java.net.*; import java.awt.*; public class ServerT{ public static void main(String[] args){ Server server; String clientRequest; boolean quit=false; server=new Server(8001); while(!quit){ DataInputStream keyboard=new DataInputStream(System.in); try{ clientRequest=server.in.readLine(); if(clientRequest.trim().equals("CLOSE")){ System.out.println("Client says: "+clientRequest); System.exit(1); } System.out.println("Client says: "+clientRequest); server.out.println(keyboard.readLine()); }catch(IOException e){ System.out.println("IOException in server.in.readLine()"+e); System.exit(1); } } } } 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("\n **************************** *****************************"); System.out.println("\n @(#)Net Applecation Version 1.00 97/12/30 "); System.out.println(" Copyright (c) 1997 (Lui DongBing) All Rights Reserved."); System.out.println("\n ****************************** ***************************"); System.out.println("\n Server is: \n "+server); socket=server.accept(); for(int i=0;i< 260;i++){ // 發 聲 提 示 Toolkit.getDefaultToolkit().beep(); } System.out.println("\n Server is ready ! \n"); in=new DataInputStream(socket.getInputStream()); out=new PrintStream(socket.getOutputStream()); out.println("We connect in "+new Date()); }catch(IOException e){ System.out.println("Server is failied !"); } } }
客 戶 機 :
import java.util.*; import java.io.*; import java.net.*; public class ClientT{ public static void main(String[] args){ String welcome,response; Client client; client=new Client("202.120.80.20",8001); // #1 DataInputStream keyboard=new DataInputStream(System.in); boolean Bye=false; while(!Bye){ try{ welcome=client.in.readLine(); System.out.println(" Server says: "+welcome); client.out.println(keyboard.readLine()); }catch(IOException e){ System.out.println("\n The talk is CLOSED !"); System.exit(1); } } try{ Thread.sleep(200); }catch(Exception e){ System.out.println("It is a bug !"); } } } class Client{ public DataInputStream in; public PrintStream out; private Socket client; public Client(String host,int port){ try{ client=new Socket(host,port); System.out.println("\n *********************************************************"); System.out.println("\n @(#)Net Applecation Version 1.00 97/12/30 "); System.out.println(" Copyright (c) 1997 (Lui DongBing) All Rights Reserved."); System.out.println("\n *********************************************************"); System.out.println("\n Client socket:"+client); System.out.println("\n Client is ready ! \n"); out=new PrintStream(client.getOutputStream()); in=new DataInputStream(client.getInputStream()); }catch(IOException e){ System.out.println("\n IOException !\n"+e); System.exit(1); } } }
程序中#1處的"202.120.80.20"讀者可改為自己相應的地址。