数学建模社区-数学中国
标题:
[转帖]Java应用技巧
[打印本页]
作者:
god
时间:
2005-3-31 01:14
标题:
[转帖]Java应用技巧
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
9 d( C2 m6 V5 d
/ V% R4 e9 _+ _$ V! d$ q9 B
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。
0 L% f" L' F9 w9 H+ V
' y* u u9 ?& ~3 K- e# x& h% w
---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而
& s/ `* b p- s+ ]3 V* M. l
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
B6 V% k& ]9 n3 i2 v+ n: L( g
4 v, N T* G1 V2 k- S
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
. `3 n. [" N8 i% N) ]! K* |
[3 b6 J+ F7 {4 Z# p8 C+ o( ]% `/ K
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。
& f f0 W; q6 ]( O
7 k+ ? P9 U, L8 i( s+ Z' m
---- 例 程 如 下:
1 Y, y8 S! {+ j+ Y+ ^+ Q
6 p/ ~ X' T k5 M% x
import java.applet.*;
: L" z& G0 ^& B
import java.awt.*;
$ y) Y* C* I) V' `) W" P1 p; Z! i
import java.awt.event.*;
" z/ Q0 ~3 X5 Z. i0 L; U4 R
" _' u' {/ Q# u3 b
' ?9 F4 |0 A/ h+ g2 L! t
public class Example extends Applet implements
- Q- T/ q2 l7 S
ActionListener{ // public static void main(String[] args){
3 i+ W9 X; k; T* z1 B
Frame win=new Frame("Example");
( I( j) z# V& V
Example example=new Example();
5 r- F/ d" m0 P/ u* ~) P
win.add("enter", example);
( O7 Z' v& |9 w( {$ f& H
example.init(); // win.setSize(600,360);
. z v+ T9 g+ [8 A) e# ^
win.setVisible(true);
8 A0 U5 P+ I1 Z; y$ k4 ]0 s
}
4 v1 T6 H, x) `3 E7 y
public void init(){ // Button button;
0 Y+ J! ^6 x3 t9 j
Label label;
8 R) u# {* x& m9 s- E" O
button=new Button(" OK "):
0 t/ D! d+ k2 ~
button.setBounds(280,200,100,20);
. V! ?; x% X9 Y) N3 }
button.addActionListener(this);
4 X& z' \: X( X* X% B0 o$ j3 R
label=new Label();
& w' [4 q8 n* }, }
label.setBounds(260,100,200,20);
+ H! J# l, O) M o9 c# W2 k
add(button);
D( i4 N8 Q& x7 Z5 Z: O6 l; [
add(label);
- {5 J6 u5 a0 d0 M/ Z
}
, A" B2 ^( l: h0 G( I! o
public void actionPerformed(ActionEvent e){
' H9 M: e& g! Q7 @: @2 l: p2 z; k
Object source=e.getSource();
0 h+ `- G$ N& {1 A' G
if(source==button){
" x, t/ d' {% y& C" @
label.setText(" It is a example !");
; U+ h* X6 f, {. T3 M( p5 l" D6 k* s
}
. N: F* x! P8 Y
}
" n( V# @5 [' ~2 w3 ~
}
: m3 V; M3 Z3 ?" _' j) R
2 |; w/ X+ w; A- g& F6 B! o
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
/ l" e' `5 o0 Y; i# S$ A6 P
9 [2 R8 a+ ^0 F+ k8 ~# i
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
" F' R- K% ?( [# L
! [+ ^5 T3 M7 m: i* E, Y% j" u
---- 2. Java 中 的 发 声 提 示
9 U4 _* W5 E' _+ _( M6 w5 B2 J. p
6 D+ d n$ [( e5 f5 \, g$ Z" n
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。
- x7 ]2 A) A2 D( r( z& {" p1 I* P' }$ }
8 v& U$ |% `1 Y
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
* x5 o/ ~7 p% u
7 U! ^5 \" i7 s2 {! j
AudioClip audio;
9 Q0 Y8 A9 j: c& r
audio=getAudioClip(getCodeBase(),"Hi.au");
* c: F5 ~# m6 I4 B( B
audio.play();
- C! _& H# o- i5 a- } z4 }1 g
2 r& x* U, p7 K2 u p
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
/ w) e9 _. \) f6 }3 |
够 被 调 用 的 。
; k6 E* q$ u+ ]: O$ h/ _
' S7 E2 z: w* O+ O
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?
" X6 b: M( a' E8 O7 N% p
E+ {1 L+ ^2 ^
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。
# G5 Q' a8 b* Q1 \6 K+ r
% Q" z( [6 ?, f0 l- g. I% S
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
( t0 a; o0 i% b1 k" X- e
2 m. V4 r; N" W$ g6 X$ q" `
---- 程 序 如 下:
1 @# W3 a- h" u* c5 z# ~
+ X8 u3 P, Q4 e8 h, @8 o8 G! P
服 务 器:
2 r/ t/ j% [6 n2 A2 u/ R0 r
import java.util.*;
- @/ Z$ ^: z1 y, U3 v Q+ e% C
import java.io.*;
; _3 G# x: w2 r& v* y: ^
import java.net.*;
& `5 P( L$ U0 h$ {
import java.awt.*;
/ _' Q+ {! ~- j* Y" P
- `, {5 J/ s" h! c- f# r
public class ServerT{
% T) r) h A C. \6 ^* l7 }- h
public static void main(String[] args){
i. Y+ ^$ n" j# A- h7 r
Server server;
9 H/ u$ g+ `# e( N0 O; C9 j* Q' G8 ^
String clientRequest;
, ?3 Y6 n( k9 n, c" D3 D
boolean quit=false;
4 j5 S) ]% Q( }8 u+ R
server=new Server(8001);
6 K* y, H& \6 V$ |, `; j$ g, r
while(!quit){
: D" u$ y5 V2 b3 W( y
DataInputStream keyboard=new DataInputStream(System.in);
* t+ a" q2 n8 X2 W& b5 X9 `/ C
try{
( C% Z: d2 Z) `6 D
clientRequest=server.in.readLine();
9 t) J! W) u' [4 Q8 A# P7 N
if(clientRequest.trim().equals("CLOSE")){
) {; @% Y: E: R% |, u
System.out.println("Client says: "+clientRequest);
% w" N% O/ Y# B# b
System.exit(1);
/ a" B" K5 m7 H# o: ]' t O
}
! z3 s& d) \+ w% U4 a
System.out.println("Client says: "+clientRequest);
e; m; q3 O, u& d1 n- u
server.out.println(keyboard.readLine());
3 T3 |# B/ J- y0 ]5 x! g
}catch(IOException e){
! u- I) F' U, N# e3 H
System.out.println("IOException in server.in.readLine()"+e);
# X0 d, G9 Z% m8 v: y% y: F4 B
System.exit(1);
2 p% {$ l# Z8 d. \
}
, ]7 a; I/ t6 V3 }
}
A/ f' [6 G# U1 o( G3 O. T
}
# Q: N( M& \. W. K0 Q* g
}
# [- {) Z! J* [: i
class Server{
6 B2 H) Z/ M: C$ M9 K
private ServerSocket server;
+ k! _9 ]7 L. B5 H
private Socket socket;
8 g* {. d/ b* d0 }2 z7 t) R( @+ y
public DataInputStream in;
$ |' Q5 w+ N5 A
public PrintStream out;
0 u) A& _) x- u
public Server(int port){
" s/ f8 t2 K* a$ b; h* x5 ~
try{
. ?7 O( N" o: e1 `4 E2 x' K/ L
server=new ServerSocket(port);
' |0 T" t, m, X; `1 @7 F2 G
System.out.println("\n
& q& r4 O" B( Z, ^. _' \( D# c8 Z
*************************************************");
" p5 d9 m0 i0 b2 r) [+ A
System.out.println("\n @( Version 1.00 97/12/30 ");
# S& y7 M3 v$ H1 W v! l8 Y
System.out.println(" Copyright (c) 1997
4 ?& N+ ~ a$ { e
(Lui DongBing) All Rights Reserved.");
% M/ Z2 L$ x& d# |
System.out.println("\n
S3 Q0 i7 c1 l+ L
***************************************************");
) x+ j' L% w( W6 s0 x
System.out.println("\n Server is: \n "+server);
" H% v4 W# C3 p+ }2 m
socket=server.accept();
# }9 `3 C6 y5 o3 N
for(int i=0;I < 260;i++){ // 发 声 提 示
# D6 s7 C/ j. e/ a6 q" b; N
Toolkit.getDefaultToolkit().beep();
# H. P( C* a3 \2 L$ e5 R& [
}
: c, f) }+ i* g0 B. W/ g6 D
System.out.println("\n Server is ready ! \n");
5 ?+ {4 o& ^9 p D& G
in=new DataInputStream(socket.getInputStream());
0 U( F9 O5 w( `5 o2 q& ~2 I( K
out=new PrintStream(socket.getOutputStream());
) n( f- ^' {8 M
out.println("We connect in "+new Date());
5 p6 u+ [5 A4 P3 w8 p' F" Q
}catch(IOException e){
) u; }- C( I2 l6 t: g
System.out.println("Server is failied !");
" a6 U1 o+ M5 M: d: i& S6 C$ D- R
}
6 F# _ L- ?7 L7 j, |7 Z
}
% x8 v+ W% p7 |4 ?1 f; b2 M: b$ k
}
8 e4 O6 A7 n4 |7 d) ?8 B) s
6 E! X8 u0 x+ U8 r2 T K: e- R
# X/ N' A+ m3 }
客 户 机 :
- t. u) i0 j/ b. d0 i O0 L
import java.util.*;
* M, V: |! P* J
import java.io.*;
r% N9 C! J6 w1 v' j
import java.net.*;
; ` f1 S6 b9 }2 A2 V9 M. ?" V
$ m$ S; I5 d. b
public class ClientT{
& X# l( g" ~) T9 u! U
public static void main(String[] args){
) W1 S- i$ T9 L/ @
String welcome,response;
% z" a& w" ~* u8 D6 ^! A0 u$ x
Client client;
) m7 r( a2 H$ Q* k' K- r6 P
client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
6 |+ q" n" d8 `/ Q
boolean Bye=false;
/ @0 G6 F% v# |+ Q: y3 {
while(!Bye){
. ^& ?. m& K9 t9 m& Q) r
try{
9 b# y P# z' |) U8 p% d
welcome=client.in.readLine();
8 Y; _+ M& c4 t
System.out.println(" Server says: "+welcome);
9 f6 y( `" Q0 y: F! m; i; F
client.out.println(keyboard.readLine());
7 Q2 K! R0 a$ O# Z$ A
}catch(IOException e){
6 g: e: o2 [! |1 p$ \
System.out.println("\n The talk is CLOSED !");
' Y+ ?( e& H; U/ n: Z$ f+ n& Z
System.exit(1);
& x# T" ^7 {" Z1 I
}
5 ^8 F( x& t C
}
$ R& F+ z7 _# a2 O4 @
try{
/ _) a% P- O s6 N; }$ o" L$ C
Thread.sleep(200);
- U6 O- C( S/ h: W) V! r
}catch(Exception e){
- B5 N0 g C9 Y* F4 I8 E5 t4 A
System.out.println("It is a bug !");
( e% I/ a5 t0 U% u, H; ]6 Z' \
}
, V" d% v. s6 R
}
$ ?3 O* y1 D/ ~' y
}
7 R1 U4 h, X2 s4 ]; X
class Client{
8 G: f1 t' W8 | Q3 h. m
public DataInputStream in;
1 K, \8 b4 m" Q( l4 L* S1 x. f
public PrintStream out;
/ F; T& j! |. T+ i. u( M* H4 _
private Socket client;
8 [3 r" h# {! N ~7 C4 z( R
public Client(String host,int port){
4 F: ^* i) b. e4 L
try{
) k0 c+ w9 n6 V% r- }* b6 D
client=new Socket(host,port);
9 I B5 [$ i& S8 A% o* b/ A5 G7 |
System.out.println("\n
" m4 W- I, ^0 R# N
***************************************************");
/ x6 S6 C1 _% y
System.out.println("\n @( Version 1.00 97/12/30 ");
# R* Z, c" m, c; G" B0 r
System.out.println(" Copyright (c) 1997
$ D! a0 g# Q! P# L4 ]1 n4 I
(Lui DongBing) All Rights Reserved.");
. A8 L8 V: M- E; ]( {3 M" ?
System.out.println("\n
7 W$ a5 A* Y4 Z0 E
**************************************************");
- e( @. Q4 v/ H" {. x
System.out.println("\n Client socket:"+client);
- q; R" \3 u% o' l
System.out.println("\n Client is ready ! \n");
! S' ?! Z5 P4 v
out=new PrintStream(client.getOutputStream());
; n3 x$ B: S4 J* U
in=new DataInputStream(client.getInputStream());
) b! g( p* ]1 x/ Q6 A+ ~
}catch(IOException e){
) F4 ^3 }' t* R
System.out.println("\n IOException !\n"+e);
! v. L0 q: m7 V& p S/ t
System.exit(1);
) _ I. Z& I" _/ u( k; J6 f) u9 \ g
}
u8 ^4 r8 |2 J- v8 q: W
}
% j8 R9 O; x Y" 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
的却不错的啦 谢谢楼主了
0 r, l2 x6 u7 E2 E5 U2 D2 L
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5