数学建模社区-数学中国
标题:
[转帖]Java应用技巧
[打印本页]
作者:
god
时间:
2005-3-31 01:14
标题:
[转帖]Java应用技巧
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
* }9 [3 ]( w1 s0 l
2 S( s9 Z: \/ U
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。
. |& v7 v8 }8 {4 p1 e# [/ a3 t
) ^- ^" U) F- w2 K& ]& l
---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而
1 K; d5 \ o, r/ [) V- y3 d
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
; X2 D" A" o4 I+ w- x0 U/ o
8 {8 E& I6 Y& e
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
7 d8 j6 f- ]( d% X2 ]) F( O
: `# g+ u3 D) |1 W9 S/ B8 H
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。
$ @3 L5 F `! O" Q8 r
7 _; q' z( k2 D; g( p/ X
---- 例 程 如 下:
4 l, L* `( O8 Y: P- a7 i; }
( o+ k% g' B) R0 z6 }
import java.applet.*;
! E+ r* G- g: D
import java.awt.*;
* Q6 z% N" R q6 j, G
import java.awt.event.*;
, d' I- D5 J$ F! m: e8 i2 ^
+ P$ G, h" a/ b! ^
& J8 n0 q4 } M j- B3 \$ t
public class Example extends Applet implements
# P' C; }# G. o6 F& O/ R
ActionListener{ // public static void main(String[] args){
8 e% p0 W4 S# q. Y1 m, L
Frame win=new Frame("Example");
# g o: j( U% @( Y3 F- e: Y# P
Example example=new Example();
, ]2 O) h% c5 y- Y
win.add("enter", example);
1 P4 G1 L* `9 Z) S
example.init(); // win.setSize(600,360);
" r' K/ N" p. q3 H L |6 B6 M$ W
win.setVisible(true);
% D- s$ {+ F% k( x h2 _
}
: T) N+ D, W" N+ e
public void init(){ // Button button;
- J; s' w" v9 Z" y* R/ J7 P5 T8 M( s. v
Label label;
6 R- m( K' e, F3 X
button=new Button(" OK "):
/ X1 e, X! \$ \, h4 D0 e% k
button.setBounds(280,200,100,20);
) Z0 Y* g2 U" b
button.addActionListener(this);
}$ g6 S0 S( b7 L% \
label=new Label();
8 C! `0 {# I: P2 `* ?/ O- C
label.setBounds(260,100,200,20);
! K0 m- L2 x' L3 A
add(button);
9 x- k; b9 G/ O3 }' a4 w
add(label);
H2 n7 Q, N d# J9 X. O2 Z0 Q
}
) L9 E1 @: U$ S' c* e4 a s2 X i
public void actionPerformed(ActionEvent e){
/ }: L; T" i+ X7 o$ S D: l
Object source=e.getSource();
! ^! y5 I6 e T) j# D& r9 l3 e
if(source==button){
6 s, D& L0 @; d: P* F0 @
label.setText(" It is a example !");
' x2 M& [' x3 U( u: s
}
% o G& n5 G+ R3 a2 a/ R8 |
}
~1 \7 ~! K4 o9 X, l+ S
}
4 G4 m/ z0 J' a# y( g, x3 K, P; e
( b( ~9 s# Z4 u8 R. X. i3 ~
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
! m ~8 v! Y. `4 A# N; t, F1 }
6 ?9 V# g, ?1 d0 m
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
: l& X5 z. k4 J6 x
2 a9 S: g/ i* K d8 F9 p* H! F
---- 2. Java 中 的 发 声 提 示
' @1 h" [( h) L% p W
1 Z; h+ s- y! L( k2 y% M8 ?- g
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。
" v1 F' H2 L R1 [
* j6 ?" O j+ g* L( a6 }8 ^
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
% d9 W5 L' |# d( Q% [9 O) ^
& r6 B6 e# u5 ?2 G, w
AudioClip audio;
8 t9 i" p! X! P% Y/ ~
audio=getAudioClip(getCodeBase(),"Hi.au");
- m+ [8 j/ m C0 p( _. P, l
audio.play();
& b- Y( T5 x/ g; @" n
! k- s n2 E/ p9 \- s
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
) @8 G Y# I' z
够 被 调 用 的 。
4 ?9 a6 z- u6 y) y* D. `
6 e. G6 @( w% c+ Z2 K6 \( N
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?
, U$ r0 e. T, U _# h/ m
/ p2 ^ R. V, P) [+ [4 z
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。
: r0 L5 @2 w1 O6 @3 |5 X+ f
, {: |8 S, f* C% b' N3 _1 d
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
+ n- ?( s5 b* Y2 I8 b- e$ R
, c! u1 l9 j- I: J7 f2 m& [
---- 程 序 如 下:
H( J7 {& @% V9 ~5 l+ k
0 `, X; K* q2 ?/ T, C+ B
服 务 器:
# e7 D [' x8 h* d9 Y$ U+ V) R
import java.util.*;
% I7 j3 n! @( M/ `9 T) c7 Q+ Y+ q. g4 m
import java.io.*;
0 `( C' o* ~9 e8 t F6 O) e: `
import java.net.*;
- Z* n! ~3 S$ \! b- |5 O
import java.awt.*;
1 N& w: A% O! ]+ D3 ^( x! t. \
9 ~( M" I+ z+ j2 g7 v
public class ServerT{
' E; z' a$ |2 v* K; E
public static void main(String[] args){
, U% P/ c! h Z2 M& ]# s/ M
Server server;
/ z9 j" Y; \3 [3 o5 W5 K) v# ]) k- o
String clientRequest;
' z' {: k' I, r% S5 m( [
boolean quit=false;
6 k1 e0 M9 {7 R7 J# F. \
server=new Server(8001);
5 w6 A) g4 ~; i6 }
while(!quit){
! P' K, w4 q) w
DataInputStream keyboard=new DataInputStream(System.in);
# R4 Q% j- m* @# N! E
try{
4 o) h# e% k+ }# p, _: e" Y9 e
clientRequest=server.in.readLine();
$ q8 m! V4 \2 n. {0 Y( \% I6 g
if(clientRequest.trim().equals("CLOSE")){
! }& m& {3 U/ \: }+ o$ P
System.out.println("Client says: "+clientRequest);
; F! {5 t" j. O1 N; n/ i; a
System.exit(1);
8 B2 p1 c6 p' f
}
6 a6 |; P: h2 {* ~( }9 s
System.out.println("Client says: "+clientRequest);
7 Q) C, t" q# g. f: b! Y. \
server.out.println(keyboard.readLine());
, p; T1 b6 m0 d) [
}catch(IOException e){
9 Q4 ~. Z; S! u. q# }: N
System.out.println("IOException in server.in.readLine()"+e);
# Y+ }" r$ J: c& g% r F
System.exit(1);
T0 q: v, \% ?9 ^6 V, Q
}
& Q$ v0 `" a. r) V* y! k5 V8 s
}
; V; H, C& ~! }7 {1 T
}
/ L' m9 a9 s! w) E0 ^
}
# M e+ |+ u1 H* X1 H6 ?2 Q
class Server{
* }6 @' ^9 n# E
private ServerSocket server;
( |. i1 D. o8 s3 Q/ y
private Socket socket;
~ i* Y9 |$ d
public DataInputStream in;
* s$ ~$ N. N) m( w4 x
public PrintStream out;
& U) `% E6 i" H5 Q0 z
public Server(int port){
0 O) s( \+ s ?: A2 ^3 U
try{
* B& N7 [1 V# _* D' S
server=new ServerSocket(port);
2 `: c$ }6 L2 f0 h3 n& F. g, k3 M/ C
System.out.println("\n
6 f1 w! M3 R7 j$ ^/ _
*************************************************");
$ g9 f, `1 N) i0 h( Q
System.out.println("\n @( Version 1.00 97/12/30 ");
( p) J. [/ a( l1 U( |) I
System.out.println(" Copyright (c) 1997
: `$ p; G( m! ?4 W/ E' R
(Lui DongBing) All Rights Reserved.");
% X: _! w7 |0 {, U& q: z& D5 a: l& N
System.out.println("\n
0 |; I j2 k9 j/ f' _
***************************************************");
- ~. C3 l! w" I% G G) L8 Z# T
System.out.println("\n Server is: \n "+server);
% c0 d& a& R; h! \) O! H# x) r% E m
socket=server.accept();
, V% t6 e1 v4 \
for(int i=0;I < 260;i++){ // 发 声 提 示
. k+ V% g! C) K. W3 u$ ^: D: f
Toolkit.getDefaultToolkit().beep();
; d& J6 }7 q* }4 q0 G# _& C( j
}
" \" y7 s5 W7 f3 i5 s2 E- P6 M
System.out.println("\n Server is ready ! \n");
5 W3 ?1 ?3 k/ D/ L) v
in=new DataInputStream(socket.getInputStream());
5 m( [! Q3 I% b* G% M
out=new PrintStream(socket.getOutputStream());
1 P/ B: n# G6 K$ e+ J
out.println("We connect in "+new Date());
2 R* b; }; r8 T1 G
}catch(IOException e){
0 O0 U; }1 a9 c1 g
System.out.println("Server is failied !");
" k( ?* Z6 ?: g
}
3 e- t8 n. `0 [
}
. {* `8 `; m* a* m: P; G# |
}
2 c/ G: ]) H$ H, J* k& f' O6 e# J8 ?
& j- H8 e. b3 t# m
F3 q7 ~6 s5 r$ r/ e- D
客 户 机 :
5 O& U- {$ l, D. A8 f6 n+ Z
import java.util.*;
1 Y" ~( v1 `! b5 g8 ^, k
import java.io.*;
7 Q1 i2 E: l( O2 H# ?7 `
import java.net.*;
. \8 f# k8 R8 Z* x' |9 c. W, _3 M3 Q8 q
, Y0 _7 J: p" t. o
public class ClientT{
% K, f+ `! B: ?6 ?! r
public static void main(String[] args){
- S! |/ g! V: |/ h+ X8 p# L2 p
String welcome,response;
/ Y- x+ k& Z+ I. ~ ]
Client client;
2 G* U+ R( @0 e
client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
) y9 `0 _( b$ Z0 }% t& K' m" u d
boolean Bye=false;
' r2 {( k8 o9 s( N' q
while(!Bye){
" A0 |$ g- G; W! w& W
try{
9 k1 w% Y2 z2 P
welcome=client.in.readLine();
) S! a1 g7 i( {2 m
System.out.println(" Server says: "+welcome);
& O- \* D2 r1 M2 i5 w
client.out.println(keyboard.readLine());
( Z* O9 I- l( h
}catch(IOException e){
! [$ p h; i b" _
System.out.println("\n The talk is CLOSED !");
$ J, X6 M2 B: x4 Z* \
System.exit(1);
* r* g9 ~* o4 a: h0 H$ m6 ]
}
! h# ?$ D0 p7 y. `5 L
}
( m1 i8 p+ x7 Z9 z7 i* s! a' F
try{
# N" R5 l. S8 g/ w
Thread.sleep(200);
# p; l1 e4 F: j% q* R
}catch(Exception e){
) y' {2 H# F7 x( n' I8 |1 L7 B5 U
System.out.println("It is a bug !");
, Q. K3 u, l4 b3 G4 H: [% K6 S
}
5 V. T# P; `* n" Y/ O5 v
}
/ k0 i! t! J( T; \9 q
}
% s1 O1 x! m/ z' C) C/ q( K
class Client{
1 y5 M" p: L, c3 C$ P Z
public DataInputStream in;
- k1 e9 c% M' R9 m
public PrintStream out;
" Y6 U' T) [2 |7 E8 f
private Socket client;
; t2 i+ N) K: T3 h0 E- }6 F
public Client(String host,int port){
3 J& E# ]5 z5 \& S- |* g9 g
try{
} S# h2 X" s$ o
client=new Socket(host,port);
u' O ^# d: U
System.out.println("\n
1 l: c/ {" A* g# O; j
***************************************************");
0 O2 L1 T4 L2 b/ M( P
System.out.println("\n @( Version 1.00 97/12/30 ");
8 F" |- x4 i* _4 Y- }( I: k
System.out.println(" Copyright (c) 1997
& ?; c( v1 B6 ~5 G1 ?4 M9 T
(Lui DongBing) All Rights Reserved.");
; P( U U9 `2 r: x' V& }
System.out.println("\n
) A* U* F2 C; B; i! k+ z* c0 x1 _
**************************************************");
. c {. Z5 q0 z
System.out.println("\n Client socket:"+client);
( R u2 |6 X( d4 C/ t
System.out.println("\n Client is ready ! \n");
) g' f& ]& [. a; \' K8 A1 n
out=new PrintStream(client.getOutputStream());
) r4 w" k$ b' M1 l; m: ~- c* v
in=new DataInputStream(client.getInputStream());
2 d( \, |1 I, \. _/ R
}catch(IOException e){
$ ~" G" `7 r" [. d& i
System.out.println("\n IOException !\n"+e);
6 M+ i w3 H% T. r, R
System.exit(1);
7 c, [" x3 M: h# a. e f4 P: M
}
% D' P- Y. ~& R8 B+ q
}
* }' R- Y& T% O
}
作者:
wangyu249
时间:
2006-11-21 15:07
xie le
作者:
zq1987884
时间:
2006-12-12 13:15
<p>不错</p><p></p>
作者:
wssl103050
时间:
2012-8-23 12:30
的却不错的啦 谢谢楼主了
& Y- a# s: K9 h+ q {. n
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5