数学建模社区-数学中国
标题:
[转帖]Java应用技巧
[打印本页]
作者:
god
时间:
2005-3-31 01:14
标题:
[转帖]Java应用技巧
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
- y7 G( i2 ]2 {0 X7 Z( n3 A+ C
C" S+ O/ n6 x7 n2 J2 c/ V3 R
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。
2 D: ^9 {* p9 E! f' H' c: B8 A
7 ]2 a1 U; @" m. q2 o S2 O
---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而
2 t" ~% ]1 c/ m5 I+ V5 I$ `
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
- F# x& q5 Z* C; F! X. _; m& e
" ^, g: A6 P0 Z: h
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
$ n) }' a# Y b7 X8 x
7 j+ I& i9 _1 S, w$ [
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。
( t& b) d4 r2 r
7 E+ c7 _- k* T0 V6 j1 Z$ n
---- 例 程 如 下:
/ |( I. ?6 ~0 W) I
9 ~8 o `/ w! L+ h# r
import java.applet.*;
/ Z1 \8 l- d3 N' @' h- C. g
import java.awt.*;
) B6 J; A$ ]$ K) k, G/ i
import java.awt.event.*;
/ e5 f3 `3 |# @7 ~# j* `
+ L* [ W l& I: T
6 A, e% t7 t3 ^- ]* x5 x% g: ]
public class Example extends Applet implements
- x0 a9 ?, Z! _. n: |3 z
ActionListener{ // public static void main(String[] args){
# ]! g" x" j& M% y( O5 H1 Q( b
Frame win=new Frame("Example");
( l& v: X5 T9 Z4 Y! C9 S( x5 O
Example example=new Example();
( T( v5 t) C# c4 E2 P. x
win.add("enter", example);
7 A6 D; I4 Y) P; b( Q& B$ f; L
example.init(); // win.setSize(600,360);
9 D4 r; ]# z& W7 T1 ?' Q' ?
win.setVisible(true);
2 X: U4 K, g4 U. F( s
}
# `5 ^' |) v3 D! K
public void init(){ // Button button;
# L2 |6 A3 @% m$ o1 }0 n
Label label;
" r9 v( Q' Q! S/ X* `% z7 A
button=new Button(" OK "):
4 S5 j# y' N, p0 Z# K* B
button.setBounds(280,200,100,20);
8 \* X3 R# A L$ K! L9 Y$ D
button.addActionListener(this);
0 B$ F+ {' K7 m) B; o3 t, g
label=new Label();
2 h( I7 M: a) |; T
label.setBounds(260,100,200,20);
" _7 ?' @" ]; |- O U, w9 k
add(button);
8 k c6 m1 p2 Z7 W. n
add(label);
! q% d4 k2 D- ]% r- B8 H: T- R
}
1 d5 x( S9 C2 \4 A& _
public void actionPerformed(ActionEvent e){
: @3 c. m: h% I/ m# m* r/ q
Object source=e.getSource();
x5 a$ w% K% y& Z4 N
if(source==button){
4 ^7 }: ^5 M) n
label.setText(" It is a example !");
. t% _3 X. q) Y' B( R6 n+ v/ T) z# s- b
}
7 \0 ]' v* w1 B( L
}
$ W5 q& ^2 \$ c/ Z: d j& Z
}
) J5 S/ U' q. s1 I
% f% E" Y, n( \; F+ o; R/ h$ x
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
- m* @* P( ?3 l
5 b0 q! j* K% ~
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
' f0 s# b$ }& ~6 H2 [' [# n, V3 V& n
' O4 {+ p7 E+ Q, A) I4 k& U' _
---- 2. Java 中 的 发 声 提 示
+ S0 J# O- k6 G! L) [
+ S! _" z$ J9 D* x
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。
2 e( v9 z3 T& T6 a8 H# {& j
( G) ^' l. H/ j% M2 E
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
( \: q# N+ ^& e' j( G, t
: g: c- @$ `$ ?
AudioClip audio;
$ S1 m. u5 I" v( v: h* E. y
audio=getAudioClip(getCodeBase(),"Hi.au");
+ z* L" p1 z) A' c, {
audio.play();
I$ l; {; V; V8 d) z
! Z/ t' K' v0 @5 T
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
+ ?' {2 N" g% m
够 被 调 用 的 。
& Q9 k3 V- j; N0 T- T
9 J# M, y: }. }) v/ o
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?
; G# T$ H8 C, o" I k% j0 z
/ S/ J( n8 t4 C; Q# W# u% C/ Y
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。
6 }" O$ H W u; I% J
# J3 S, X; t$ I7 }( ?
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
7 Y5 a" @& w$ ~" ]& m9 U
- r' x- y. K: v" a
---- 程 序 如 下:
- C+ {' n* C& p0 s
/ T2 X6 Q! k) Z: {% {1 p
服 务 器:
+ X/ d, ]% r) t+ i$ x! p4 f% [3 S
import java.util.*;
! M/ f9 m3 K3 R* m. M
import java.io.*;
' r! v2 m0 H$ F# c4 N+ L
import java.net.*;
, O; ~! h3 C8 D2 v P5 L
import java.awt.*;
$ i. J, c# M' a5 I! B
/ g3 Y- z2 B: F7 h
public class ServerT{
# P8 Z) T& ?% M% F" X I1 [
public static void main(String[] args){
' `+ F) o4 T% s. ^
Server server;
' q: }0 t2 {$ p0 G
String clientRequest;
5 M! B: }9 o: E3 M( L
boolean quit=false;
. w& v. G0 H1 p
server=new Server(8001);
0 L9 o# s- M9 r9 K7 x* t% }: b
while(!quit){
& q! Z/ h" i# u
DataInputStream keyboard=new DataInputStream(System.in);
% h. D' A* p6 z2 R' ~( J- t0 d
try{
; _( M4 \& r. R) [& `0 N. N
clientRequest=server.in.readLine();
j: a9 Y9 X" |
if(clientRequest.trim().equals("CLOSE")){
0 B1 [; q/ [' Q: u+ U) S' m
System.out.println("Client says: "+clientRequest);
5 n, L$ v5 Q( w1 x# X4 M2 a$ {
System.exit(1);
9 b0 e! a0 z4 i; {* }# f8 M
}
. f) g6 G5 o1 L' \! `% J
System.out.println("Client says: "+clientRequest);
4 L* r: b( p8 ]. g, N
server.out.println(keyboard.readLine());
6 p0 I+ L+ M) z1 J1 \
}catch(IOException e){
- u8 ]/ r3 e5 D5 W+ _. a% c
System.out.println("IOException in server.in.readLine()"+e);
8 A/ m% x* G- C; y# v
System.exit(1);
6 O! C- u) ~5 G; v8 `8 |- y; T
}
" T6 A- Y8 i/ Q; {( q( o
}
" O" h- ` n ~) B0 z
}
5 O# y7 `2 G3 G% Q: A) \0 V. c
}
9 r, a( V: o- x8 |- e- ?$ H* U: [/ U
class Server{
( `* l( ^! n# H n
private ServerSocket server;
% v' z- Q4 ^9 Q3 z, d+ {
private Socket socket;
. V! a4 n% }) u8 d' v+ d3 D& _/ c
public DataInputStream in;
4 L! b( b. W" j1 c
public PrintStream out;
( i$ |* C. o% @
public Server(int port){
& Q( _: H' X N& Y: q' b
try{
' o/ S* x4 K3 C5 H% Y( w
server=new ServerSocket(port);
' e# T0 F9 g3 |" V+ @8 g! e
System.out.println("\n
! a5 y* W4 L% R6 ?/ V! M7 E
*************************************************");
3 z1 L9 Q: U) q4 B
System.out.println("\n @( Version 1.00 97/12/30 ");
2 z1 Y4 A, ` O6 k3 P$ |. U6 p
System.out.println(" Copyright (c) 1997
d0 ?' U* V/ U: E+ Z3 ]
(Lui DongBing) All Rights Reserved.");
) U* ]' d( W$ S7 R) L) y7 K
System.out.println("\n
* T+ u6 Z4 t; r6 v# C0 H
***************************************************");
5 k- l2 y$ L9 g/ P
System.out.println("\n Server is: \n "+server);
9 y4 F6 O3 b$ O7 C! k }" R& N
socket=server.accept();
2 P. A% c/ ] d$ D. U' W) |
for(int i=0;I < 260;i++){ // 发 声 提 示
! D- P) ]7 h! m/ j; y6 C
Toolkit.getDefaultToolkit().beep();
9 Y2 C) j* r1 F& o. l7 x2 y) p
}
% c3 r1 k+ ^& Q
System.out.println("\n Server is ready ! \n");
$ w( M' |7 S& G% H7 k% a7 m: |7 X
in=new DataInputStream(socket.getInputStream());
& ?* [6 }4 z8 C# b
out=new PrintStream(socket.getOutputStream());
- s2 w7 R" ]6 O) W m
out.println("We connect in "+new Date());
0 B j9 \1 ?3 P+ o- o
}catch(IOException e){
+ s6 h3 t# W0 y
System.out.println("Server is failied !");
* ?# k1 d% f" q+ O
}
8 K1 f1 _. p) D) \
}
6 h; A( k" c) S. ~5 b. j) P
}
% C" f: r' j. I z
+ y& b' _8 k# p6 w
X/ m! i4 `/ Y# r$ K3 m
客 户 机 :
~: Y V y5 Y$ ]3 p" M* v
import java.util.*;
% f+ f- B7 [2 U
import java.io.*;
2 A8 e6 k) ]& D- C2 I
import java.net.*;
6 o L% E" C8 e
5 N E9 h6 b) N1 @7 ~
public class ClientT{
& d4 q; s$ @1 }' z5 _0 S
public static void main(String[] args){
/ S; X2 h8 f/ F# v. O3 c
String welcome,response;
- B; K$ M( T* t6 W
Client client;
" W) K" ]4 G- t% m: i- p1 H
client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
8 k! {6 J$ {% e2 g% ^) ?! A' t, m
boolean Bye=false;
: ^' `# I: ~) V" g7 b
while(!Bye){
" X" M: s7 h i) A. Y% _. p( N
try{
; S' a3 }3 A H& e2 Q
welcome=client.in.readLine();
# D% W$ r4 q# \; O- g
System.out.println(" Server says: "+welcome);
. |. ^. t* \( l( T0 }& c
client.out.println(keyboard.readLine());
% i# [; I9 a6 k/ _9 L8 y$ _
}catch(IOException e){
2 \: [5 y# F8 c, G8 Y
System.out.println("\n The talk is CLOSED !");
0 H7 o7 |: a; ~$ ]! G' @
System.exit(1);
* s9 J* _, z$ {! g# I. F1 Y
}
5 p; C& I: w4 w# H; n
}
6 K* N, z: }8 j1 C, M; w+ k1 ]
try{
3 ?# y' G: ~2 \9 z3 X& @, }
Thread.sleep(200);
/ y( S: q4 d7 Z/ s( J
}catch(Exception e){
" F4 Q# F# r/ b% N' _
System.out.println("It is a bug !");
0 L9 {/ f- |5 a* p& z4 Z# A l
}
* j* ~3 H* |% p. N9 R0 ^
}
$ w( `4 O0 t1 n3 w# C6 I" I Y
}
( k/ E; E3 B. I/ \9 U
class Client{
2 K- Z" W2 Q1 @: L
public DataInputStream in;
0 m4 V: p/ d. Q0 ]* `6 R
public PrintStream out;
( u `2 V* i( h9 s p( \+ [
private Socket client;
X9 d) Y- U I/ I' a# l1 p" _
public Client(String host,int port){
# a/ ?. u* g/ M2 P/ u" R
try{
! v# {) p8 c& E4 |: Z' k9 e ^
client=new Socket(host,port);
% _8 R. `* V& C. r! s
System.out.println("\n
/ x$ J+ L4 d- }( t/ w& s9 V' D
***************************************************");
6 d4 Q; G3 n/ s- g+ y4 }
System.out.println("\n @( Version 1.00 97/12/30 ");
* X0 _& Z7 k9 b- M0 w' H* S5 U
System.out.println(" Copyright (c) 1997
" h" l" L: @, r- r. S% P5 ]+ @0 Z
(Lui DongBing) All Rights Reserved.");
& [* {, H% d6 G( ~3 U0 B; n
System.out.println("\n
. P8 _' |/ u, Y/ V9 \
**************************************************");
8 H5 M7 N# S# @. |* a
System.out.println("\n Client socket:"+client);
( J5 h2 p& [8 W8 b: [! y/ q
System.out.println("\n Client is ready ! \n");
8 T/ V7 G9 Q6 V2 F
out=new PrintStream(client.getOutputStream());
- t% ~6 g8 `( Y* ?) @5 y: h2 L
in=new DataInputStream(client.getInputStream());
, r+ F5 _5 y0 B, Q' i
}catch(IOException e){
6 W. J* p4 L! W0 P
System.out.println("\n IOException !\n"+e);
: Y. w2 y- J, w- E
System.exit(1);
1 S# K5 z. M8 w4 \" B
}
' ~, ]8 i1 `- z/ A: F$ v1 z
}
9 X0 ?, a7 p& C( Y0 x
}
作者:
wangyu249
时间:
2006-11-21 15:07
xie le
作者:
zq1987884
时间:
2006-12-12 13:15
<p>不错</p><p></p>
作者:
wssl103050
时间:
2012-8-23 12:30
的却不错的啦 谢谢楼主了
0 O8 B$ Y k- g* m; l4 v
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5