数学建模社区-数学中国
标题:
[转帖]Java应用技巧
[打印本页]
作者:
god
时间:
2005-3-31 01:14
标题:
[转帖]Java应用技巧
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
# ?# h# Y. y! @
2 |$ R: f! f/ r. \" O0 E
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。
' f0 s9 Q6 q d! b9 A! j
O0 G7 @3 P& r2 i. B
---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而
- }9 \$ d$ c8 Z( M6 _ Z# h
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
2 p1 ]8 J4 N- q4 D# `' b
- B4 A, { S/ N% u
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
: q" D$ b0 Q# C7 T" Y
; C7 J5 i8 P. D" f9 G0 Z& G: G
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。
( V" ~/ U1 j9 P( J" Q& U( s1 A
4 x; N, T. {3 H# |/ ^* l
---- 例 程 如 下:
2 ~+ i @9 {% D- i4 R# q) U
7 L+ b/ k* p$ _
import java.applet.*;
1 B( O* a# B2 L8 Z- X% _1 J
import java.awt.*;
" o4 V; X! I- A r8 M/ I* [! F
import java.awt.event.*;
; L1 }7 i( F% b% a5 c
2 C5 u- u" A( M+ ?
4 k6 D$ Y$ W5 R- j3 b$ N9 d
public class Example extends Applet implements
) @! c1 j& D3 t3 U& W& S
ActionListener{ // public static void main(String[] args){
! V: H: V6 o: j9 C) X2 f* ]* Q
Frame win=new Frame("Example");
+ B- f1 a, `, a+ }
Example example=new Example();
' m4 D1 c2 M" D) D1 n
win.add("enter", example);
b' z. u% J( Q7 S6 c
example.init(); // win.setSize(600,360);
7 h- Y" x3 W9 \4 O1 d! b+ N
win.setVisible(true);
5 U# o$ z( G6 t& n* q! I
}
- q; ?% @3 e1 q$ ] b" u8 M. o
public void init(){ // Button button;
& }+ O. y6 c% K+ T$ p6 e
Label label;
* _/ A1 E6 E; r$ o" P: x3 l7 Q- ~2 M
button=new Button(" OK "):
7 w( I2 l& A, W( s
button.setBounds(280,200,100,20);
5 L0 S* \* W K! K+ i
button.addActionListener(this);
3 R( J" D# w! r% t
label=new Label();
# t$ E) T9 G4 m: Z
label.setBounds(260,100,200,20);
- [: y! c j( Q9 }/ {
add(button);
; ` B# I0 G7 ~( E4 G
add(label);
* }% |: i; N# {
}
2 w, Z( _! U& p
public void actionPerformed(ActionEvent e){
3 }) s9 {/ M% \6 d+ j
Object source=e.getSource();
7 {2 v0 q' L. C' [( l$ s: J
if(source==button){
2 r7 o* t$ x6 J! Y4 y* }$ r& i
label.setText(" It is a example !");
0 X' u7 S( B$ B) _
}
" l5 V7 J, C' x0 z0 m* c
}
$ X" C& p) m8 i. S" y* ~
}
! v8 _% _4 b* @6 w* ~
3 U! F5 F% @# p' Y5 F( v8 X, M
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
; y0 n& W) J6 U; f( l
) H% r% M& h7 p" k2 P
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
7 O% F5 k- S0 R0 x% S
$ B' o1 D+ u) u
---- 2. Java 中 的 发 声 提 示
1 c) L- L% ~# G1 i n, |
( |7 E3 Q4 I9 z4 k# d8 h) V8 ?" e
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。
# I/ [; v4 S% t+ p. `" i
. r* s7 [9 D/ L7 O$ e5 _
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
4 q3 d/ _. {* I# T C" m
4 Q7 q3 g/ y) @
AudioClip audio;
/ ]$ f2 U% Z4 f5 ^1 q' g
audio=getAudioClip(getCodeBase(),"Hi.au");
5 U5 U" q' x( i& t y" O
audio.play();
! h* n3 V1 l6 s' L( |! C/ P: g
0 z. V5 H2 ~) `7 j3 V2 {2 ^- Y( w1 m
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
! E# B2 l, I" B0 P* j
够 被 调 用 的 。
( x" i4 D1 R) o2 q( @8 q
4 i) e( [/ e# r% _! i& ^- Q3 [
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?
- i( v1 c8 `' \: g, w3 t4 e
% V7 o) L, p* G% I# X
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。
- k% q+ R# `" j8 s+ e& ^
% n# L* m) S$ g
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
6 v7 N' y1 V& S& a4 H, F0 }; r
4 E) F; a1 G& _8 J) n1 k
---- 程 序 如 下:
; O t3 Y; X* Q) _% ^
9 P) @' {0 k# d* B6 Y
服 务 器:
' [; i7 w9 M5 s+ h" _
import java.util.*;
% {6 c) u \' |, S; h8 q/ _
import java.io.*;
* D, H2 B8 Z6 A1 j* l
import java.net.*;
' J ~) x% B2 ?9 \5 [
import java.awt.*;
2 j# j* i; J: v; d' p! F9 ~: R
! ^" T" M5 f8 O7 R0 s
public class ServerT{
( ^5 s' J0 k# e" E) n8 t
public static void main(String[] args){
4 d! Q. G/ y4 Z& @5 f
Server server;
+ w z# n0 [* a& y! Y
String clientRequest;
0 S0 d+ l$ D2 ~) F6 M
boolean quit=false;
; `( f) b8 u5 x/ M
server=new Server(8001);
. D' Z: D ^$ E5 d& Y, G8 A4 w
while(!quit){
' T+ s# l& N- ?4 |! F1 W$ W/ n
DataInputStream keyboard=new DataInputStream(System.in);
0 p1 D& C! `# B
try{
' q, G4 c: s- I
clientRequest=server.in.readLine();
- r0 U/ a8 W( \& n: c O
if(clientRequest.trim().equals("CLOSE")){
& q7 ~ c+ d. r! f+ C1 C$ A: E% C
System.out.println("Client says: "+clientRequest);
& d8 d! D1 p6 ~1 Z3 Y
System.exit(1);
2 m* W1 }1 a: ]" f" c6 A
}
) R0 t j) U! |$ V5 w/ y$ ] q
System.out.println("Client says: "+clientRequest);
9 g0 i' F0 H3 }9 V* q; ?( m
server.out.println(keyboard.readLine());
6 O# J* ^. x2 w9 F
}catch(IOException e){
5 E! E# K1 e7 h
System.out.println("IOException in server.in.readLine()"+e);
5 m. h4 \" v- f# X
System.exit(1);
& ~+ }' ?' V. t$ |) U. v/ s) j9 S i
}
8 l8 P% T1 s( j; n1 ~' W
}
" W* w0 `0 F. z" ?( c" F+ I
}
3 o/ s! G f# D3 e
}
& r+ c; a+ F y9 |0 s( y j R
class Server{
; ]( E9 y. [3 y, F% t7 k1 q
private ServerSocket server;
9 R2 k6 W2 _% P4 N1 f
private Socket socket;
- a' j C/ l5 j7 i
public DataInputStream in;
. p1 `7 P+ {8 t. G4 V+ k0 x1 t
public PrintStream out;
. G* |) x/ d6 k2 E4 `( o2 _; }
public Server(int port){
5 @3 d( M/ }7 u9 B+ @' b; M4 z
try{
2 O0 L) i7 u- {9 W2 {% O; j0 u4 ]6 D
server=new ServerSocket(port);
& q) I# l& w4 D
System.out.println("\n
% Q# [6 T1 d1 H" W4 w" W5 f
*************************************************");
/ F6 k7 \7 C6 A( J" y3 V. a
System.out.println("\n @( Version 1.00 97/12/30 ");
+ h+ s4 p- Z e* A8 f0 Q E: e( L
System.out.println(" Copyright (c) 1997
A, T( m9 v w: y; i4 n
(Lui DongBing) All Rights Reserved.");
, Q# }& Z7 c+ ]
System.out.println("\n
& M/ ~1 ^6 q/ `
***************************************************");
: m$ _9 F& ~8 l- {4 G! m
System.out.println("\n Server is: \n "+server);
, ^; x! U2 I8 r$ L G$ r- n
socket=server.accept();
6 D) p. ^+ w+ J6 P# d
for(int i=0;I < 260;i++){ // 发 声 提 示
# W# O& C) S1 L. r' b# r( T- |
Toolkit.getDefaultToolkit().beep();
g# N1 H: ?+ G
}
6 D% `/ K4 j- c! j2 j
System.out.println("\n Server is ready ! \n");
) a, S6 D, t% v$ l( n! E
in=new DataInputStream(socket.getInputStream());
$ d- j! @* f$ e5 k" Z
out=new PrintStream(socket.getOutputStream());
$ E( [: O, g5 c+ ~; P% B- _
out.println("We connect in "+new Date());
7 ~( T; \: D3 A b ^/ g% ?
}catch(IOException e){
" \. @% u9 b+ ~- x
System.out.println("Server is failied !");
7 R$ g, B6 {- {. L& H u- A( g
}
- j4 u9 _# a4 T3 U, h
}
) d! u; D# n* n) a5 G8 B S) [
}
2 q: t: r; \ m4 h2 M4 V3 B
% {. z; Q4 ~8 I. [) [6 v6 w
2 O5 s9 {* j8 N7 @7 R0 \, C6 v" \
客 户 机 :
; x. Y( w% }# `
import java.util.*;
' b, I% U& I; M- k: p7 e3 c p5 H
import java.io.*;
% h" z3 {' n, c7 H6 i/ e/ [, H" W
import java.net.*;
$ q+ H& x! k/ N
4 p% U+ i4 I& j8 n7 r. N9 v
public class ClientT{
: f! ?* M5 q# [/ r
public static void main(String[] args){
i A" g+ ] x3 n9 Z5 F; M5 B
String welcome,response;
8 H2 d, I7 R5 W/ p
Client client;
) L$ Z2 u- f; i- e7 P t
client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
& O" N# n7 K+ l+ ?
boolean Bye=false;
5 W; O2 `, @4 ?5 { u1 \
while(!Bye){
) ] h2 q8 M7 |+ c. N7 B0 { |
try{
. e' C( g+ p7 m }/ p2 g
welcome=client.in.readLine();
6 E7 y4 x# t* W0 V2 Y7 p* z
System.out.println(" Server says: "+welcome);
7 k4 U- y" y2 _1 [4 `+ h6 }" T9 h
client.out.println(keyboard.readLine());
; ^- b$ c$ [( d
}catch(IOException e){
% W, g7 l! b9 b0 L2 k- P, v( m
System.out.println("\n The talk is CLOSED !");
6 I, r5 n; R. ]3 w
System.exit(1);
/ y4 C; _7 ` w# l" m
}
& U* Q+ z G, `: `" {1 D' Y$ l
}
% B2 S" l0 j+ |5 } B
try{
) G/ e5 h% y) V$ d3 [/ c
Thread.sleep(200);
0 c6 w+ H, o2 c
}catch(Exception e){
3 K0 h# ?6 q; k
System.out.println("It is a bug !");
7 R: m( Y; V2 [4 Y( P' T
}
8 L& j- m( E" h) s! a$ M% n
}
9 H( w) w' P' e7 h0 A: q
}
1 }4 o1 `$ s' ]
class Client{
. H/ I& }* N3 [. G Q6 l
public DataInputStream in;
$ Z( F& J1 l/ E% U: |
public PrintStream out;
6 S3 E/ H' Q# G8 E/ s, M
private Socket client;
% M M- O; b% x) T' O0 g
public Client(String host,int port){
% P: r7 b: Q- w+ e$ T" M9 d9 Y7 D
try{
; g% L. q- }& k; |3 ?: Y, ~& C/ ^
client=new Socket(host,port);
* U- I1 _. z% t8 ^5 W
System.out.println("\n
9 N6 D0 g9 C6 O$ b3 h
***************************************************");
9 K4 O# e6 _& y% h
System.out.println("\n @( Version 1.00 97/12/30 ");
4 Q2 v4 \- z# o5 K3 O
System.out.println(" Copyright (c) 1997
) X* F& W8 ]/ A
(Lui DongBing) All Rights Reserved.");
0 e+ ?" u9 K: S. d9 F2 O+ Q0 F5 y
System.out.println("\n
6 ?- A- x% p) H) p8 _3 j) h
**************************************************");
: f& ~' D4 h2 o% j _
System.out.println("\n Client socket:"+client);
! o* x# p) [3 w1 _4 P2 K V
System.out.println("\n Client is ready ! \n");
# F8 w% f' e" o. G' C0 D: @
out=new PrintStream(client.getOutputStream());
( d4 o5 ^& [& O- g% i3 r+ _* N
in=new DataInputStream(client.getInputStream());
9 b0 E" N. ?& K; w' a
}catch(IOException e){
& k& B/ k* m B* y" X1 k$ q
System.out.println("\n IOException !\n"+e);
/ v5 w2 Y& E7 v4 L: r& }1 V+ g# i
System.exit(1);
0 }* h3 @( q4 o6 b3 ]4 l: A8 {
}
y% t4 N, u4 i/ Y1 ?
}
! [+ ~& x% I. Q* f
}
作者:
wangyu249
时间:
2006-11-21 15:07
xie le
作者:
zq1987884
时间:
2006-12-12 13:15
<p>不错</p><p></p>
作者:
wssl103050
时间:
2012-8-23 12:30
的却不错的啦 谢谢楼主了
+ c+ T+ Q% O$ C2 ?
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5