- 在线时间
- 0 小时
- 最后登录
- 2007-11-12
- 注册时间
- 2004-12-24
- 听众数
- 2
- 收听数
- 0
- 能力
- 0 分
- 体力
- 2467 点
- 威望
- 0 点
- 阅读权限
- 50
- 积分
- 882
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 205
- 主题
- 206
- 精华
- 2
- 分享
- 0
- 好友
- 0
升级   70.5% 该用户从未签到
 |
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
; ^) z+ ], x7 R. Y) x
8 W* S. R. L+ G2 s$ z5 `, e/ j' N---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。
- \ Z9 A6 t" O- f
& S4 v' \, S" }5 ~+ N" B- b$ m---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而 ' J7 ?% x0 u" }% d2 t
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。 & @+ I* Y" c+ B( o& u6 r) r; j
6 ^/ R/ [2 B& C" h% N---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
9 f- h( K/ ^4 D- `
6 j o; d. M, N/ Y---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。 - }7 \3 V9 T0 W
5 v7 G8 y# ?4 A1 \( F1 ~& ]---- 例 程 如 下:
8 I' _+ O) j% a3 G- M* k& P% j4 C) U& R; w' g& [
import java.applet.*;
; U6 i/ [- [* Q' v7 W. K import java.awt.*; , Z! p5 p1 y* t' H, E& B. t
import java.awt.event.*;
; x) s5 O1 J' m# d& J) a% P s/ ]- |+ n& n0 Y# @5 |
, _6 Y; b+ N% Y8 L
public class Example extends Applet implements , w* \5 s$ z+ E- z0 H( n
ActionListener{ // public static void main(String[] args){ $ ~+ k. S1 d$ q
Frame win=new Frame("Example"); 3 E: a- M2 `" O5 {3 f! d5 |/ |
Example example=new Example();
2 ]; S# q; y+ |; L3 l* |0 |$ K win.add("enter", example); - J: O0 I' g6 ^( f; H' I: c
example.init(); // win.setSize(600,360);
+ o9 k l, {7 g6 P win.setVisible(true); k" T% L6 t% @5 I) N2 i
}
8 f4 S7 @ G7 a( y9 ~% H/ l. N# s public void init(){ // Button button; , [5 a% Y+ X; t4 E$ c6 @
Label label;
, d+ @- Y3 Z4 X4 ? button=new Button(" OK "): , V, R4 {3 _: m- H9 Y, k
button.setBounds(280,200,100,20); ' S- g( ?/ m C: e( o8 K
button.addActionListener(this);
6 F4 h) J/ x# |* U0 d label=new Label(); & G8 s* i/ T2 }5 F1 z0 T* p1 P
label.setBounds(260,100,200,20);
3 u, i5 s, _' j add(button);
6 I6 w/ P$ {% Z5 _- Y add(label); 6 H& |( U' S; U
}
5 ~( z3 e! h2 o- J3 ` public void actionPerformed(ActionEvent e){
# m1 m4 w* c- y4 c1 u) K Object source=e.getSource();
. W1 j3 C% J* \0 s if(source==button){
4 \0 J6 w$ `" ^6 O: \, d2 |( K3 q label.setText(" It is a example !");
# N& t- S2 z7 l: g& k# h. @ } ' I6 b) n4 }0 y! o
} $ c% j+ M4 @9 B- |+ n" w
}
( H7 T. j4 u2 Q6 w _
! G! ]$ R& C, M! }. ? P---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。 2 L0 Z$ C7 @( O# a4 p
7 r L7 d# Q( E% Q: N, E
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。 ( \0 V4 l" }. j- {- |# ?. m0 }9 o
. e+ `3 L8 z; U3 O) D% }
---- 2. Java 中 的 发 声 提 示
% C4 T) J( l8 |4 n- M) U' A" x& u( [) e9 b0 P
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。 & J- G6 _ K6 e
! s: G" }( O, f( o0 V: e---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
+ `, [* k. E1 ^8 q: [0 |0 q8 p: v4 Z( p- \2 M7 o: S [( j7 f# _8 {
AudioClip audio; ) r) i% @5 Z2 `$ [! V5 S0 k" S
audio=getAudioClip(getCodeBase(),"Hi.au"); , C, a% O3 Q- m6 a8 ^+ ] Z
audio.play(); 7 s" `+ |. w1 \% S0 g
4 o0 G9 N' {7 E# ~9 B---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
& g% L+ P' g$ @5 k够 被 调 用 的 。
/ W, T" Q# s7 F3 q' ?2 x$ K& a# g5 L. |* B
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?
% @+ x) T8 m- q- X( [: ]& \
& O# D7 {3 F: J4 h) Z---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。
7 [6 C* w' R7 I0 m3 N
( [# r0 P$ Z) \8 Q6 ]7 B---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。 , @1 v, M. L! C7 d" M
: Z6 o9 t% a+ A% D- h. |' u1 V
---- 程 序 如 下:
2 L, W: Q0 D0 f- X: }/ c7 j- t, l) ~ _
服 务 器: P; J* E) T4 ?
import java.util.*; 0 \, c5 X* \# S) Q6 C6 o
import java.io.*;
( E7 m9 c9 S# w4 `; d0 o8 Bimport java.net.*;
% G2 ~# r, M3 H0 {! z& dimport java.awt.*; ' R K0 F9 o9 n% X5 l
0 ?. _0 u1 d {" r% L% bpublic class ServerT{
0 W7 j& g B+ P9 e* h" G4 r public static void main(String[] args){ / [! A; O* a1 q, k0 k' |
Server server; 4 L# h j! G0 K$ e+ f
String clientRequest; + L: z# v* T: D
boolean quit=false; 5 p' c8 y: D% s3 L" A( O0 Z' r" ^
server=new Server(8001); % T/ M) u' ^* U) H
while(!quit){ 1 H# X$ j( C+ `* S
DataInputStream keyboard=new DataInputStream(System.in);
9 `& u! z( O) I' p i! x try{ ' R: o9 j* @+ T! F$ l( }+ b7 b
clientRequest=server.in.readLine();
J/ s% ?3 w; s5 X$ E# |$ _* o if(clientRequest.trim().equals("CLOSE")){
2 h) \. L2 m9 @. Z+ c System.out.println("Client says: "+clientRequest);
9 C' R" w6 z! g" Q System.exit(1); G1 c( [7 k1 M) u$ i4 q) X0 i
}
" n1 `/ d3 `; r$ ^ System.out.println("Client says: "+clientRequest); / y* n6 T) \% c& D. u6 ?" }3 f
server.out.println(keyboard.readLine()); % ^8 Z' Y- S+ H, {* r7 z4 M( l
}catch(IOException e){
+ x( ^! I( b$ j6 c System.out.println("IOException in server.in.readLine()"+e);
! m) k$ b) X, [8 w System.exit(1); ! F) \- x8 `" O" |- N+ e8 }2 t" w
}
: O x' d* H' y6 L! m" E, H }
) D: S0 |! y1 N( B9 G6 N } . s1 C/ \" k' R4 I4 p
}
4 S# \, G* A- a0 e) `class Server{ + T- w# u; F( P2 U8 T; ]( M0 }
private ServerSocket server; / d8 ]6 B" L7 [) q) i4 Y' b
private Socket socket;
6 k6 H4 S- D1 x0 g1 C" T public DataInputStream in;
0 t- {) p3 ~1 @& w1 K public PrintStream out; 1 g- w9 e( ~3 u; _& X# O
public Server(int port){ % W8 u# \# S3 N9 E
try{ & ~8 H" L9 m- X6 y& z: O
server=new ServerSocket(port); / a8 B) Y O. H7 h+ b( G# [
System.out.println("\n ( U' f/ i& F# o U6 }" x0 L3 W
*************************************************");
: G9 v- a- ]+ V! L$ @# n/ e System.out.println("\n @( Version 1.00 97/12/30 ");
6 I& f U0 l7 X7 ^6 x3 r. ^3 M) | System.out.println(" Copyright (c) 1997 1 v) p1 o& M. b( ^, N
(Lui DongBing) All Rights Reserved.");
) N$ Q: d9 `5 k System.out.println("\n 8 ~* r+ A) a, K7 [* @3 s1 e- E# A
***************************************************"); 7 z& s; @& X# X. @( Z3 @4 f
System.out.println("\n Server is: \n "+server);
D# G; O8 r% b# P1 {0 C socket=server.accept(); 0 `" L/ {, i; C; V$ \5 |9 B
for(int i=0;I < 260;i++){ // 发 声 提 示 8 F" i- p! w6 R; l' {
Toolkit.getDefaultToolkit().beep(); 8 |4 t% X; _+ K+ r
} $ M( y" f6 X, Q7 ~
System.out.println("\n Server is ready ! \n");
* D: A1 B* N+ G/ b: v7 H in=new DataInputStream(socket.getInputStream());
4 S- l5 Q& n* I3 S5 |& r out=new PrintStream(socket.getOutputStream()); ; f/ R- `/ ?6 l$ o
out.println("We connect in "+new Date());
: {: i% P) }- y$ D/ X! j2 k: x" O, T }catch(IOException e){ 8 Y& }5 @5 r' O8 p
System.out.println("Server is failied !"); * j" L: T( i5 m8 c
} 0 g* e3 y7 M& c4 e3 j8 |, Y- e& t
} 8 b0 d0 ^7 C5 b# _6 J
} + E3 C9 E m! {2 c4 x
( U7 `" V5 n$ I0 Y' ~$ i+ H
3 y4 S! P* _4 e( @, v 客 户 机 : . @4 V; w: r0 u1 v
import java.util.*; 6 C9 K0 t) _. X. W$ B! p& U E. k: m4 [
import java.io.*;
9 U1 D+ o' O" b; o7 M* r6 qimport java.net.*; 7 P% s$ ]" @ a. z! \- ]
5 a! c# D8 g: K3 Z6 X- Jpublic class ClientT{ $ ^ |% j9 k: @( a
public static void main(String[] args){ : K- T( \( M+ X4 D% }5 B
String welcome,response; 2 Y: F: v# D8 ?/ x
Client client; ( `7 c' c* X2 n9 O" m( P
client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
6 k4 o$ M( Y' J: j8 J9 x boolean Bye=false;
$ p3 W# ^8 }# f4 u' L* h( P( T while(!Bye){
; b) M& w# l3 W4 G* m try{ " Q4 p) |( ]; @0 C- d4 E
welcome=client.in.readLine();
) Z' Y+ i, E$ v* l System.out.println(" Server says: "+welcome); 8 `7 v" f% A( L5 P2 Y7 o, V9 \* a
client.out.println(keyboard.readLine()); # F' H: m3 n5 d
}catch(IOException e){ & m" @+ u8 c3 i+ p
System.out.println("\n The talk is CLOSED !");
* c* K. P# k" i/ t j8 h System.exit(1); 2 l0 ~5 V8 [" W: g: H$ I2 D
}
' Q5 n! D0 b1 A1 }7 k }
# b5 u/ |, V$ Q try{
6 w6 r# H: F( S# P4 ^8 Z4 J Thread.sleep(200);
7 D0 L5 @8 R+ ] }catch(Exception e){ 3 H/ w3 i" G0 f s2 I
System.out.println("It is a bug !"); - T$ i# S- R z6 u& s0 O
} 8 f8 A3 I4 T4 D/ e% R
}
8 \, Z$ S- g9 T/ D, w2 w1 c0 d} 6 J: q5 N; Q6 C, `' Q
class Client{
, _& L E! Y/ ^2 M* f% [& ?- C public DataInputStream in;
. Q! G) E! u" o public PrintStream out;
$ z+ W% W' y/ G private Socket client;
6 X8 p A. }* q3 }5 h9 w# N public Client(String host,int port){ h/ s, h" ^9 p* p+ ?
try{
; i; R2 s: w1 }" H client=new Socket(host,port); 1 o, D( G# R3 h' C" _% y
System.out.println("\n : n/ n# M. F! D9 R4 n% O* ]
***************************************************");
* _# s. r* c4 M% s0 U. g6 O& u System.out.println("\n @( Version 1.00 97/12/30 "); 1 J8 |- ^9 O4 X
System.out.println(" Copyright (c) 1997
) ]' t4 h( X8 C8 g" R (Lui DongBing) All Rights Reserved."); 9 x/ ?$ K* {0 g
System.out.println("\n
2 Y* q/ s/ z1 C$ i S**************************************************"); , S; i5 n$ b3 K, h9 @1 v6 T
System.out.println("\n Client socket:"+client);
$ I5 k" ` w+ J6 _# ~ System.out.println("\n Client is ready ! \n"); ! K7 D. f% @" L. u+ s, e* C
out=new PrintStream(client.getOutputStream());
' a3 Y, {/ R! ^5 U% C in=new DataInputStream(client.getInputStream()); # R& j+ S' X- C9 W. }
}catch(IOException e){
3 p; o8 r$ g( r( v% c' B; O9 \ System.out.println("\n IOException !\n"+e); 6 v, ^6 @9 p. ~- S& W: C
System.exit(1);
. i: h% y4 ~* B* l/ f& a } , L/ E$ d' H% J
} - }& b( a! J+ M8 ]5 }9 i8 h! C
} |
zan
|