数学建模社区-数学中国
标题:
[转帖]Java应用技巧
[打印本页]
作者:
god
时间:
2005-3-31 01:14
标题:
[转帖]Java应用技巧
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
3 }* Y. ?, k$ B+ K) ]$ g0 ^% Q
/ e& l4 J+ `" o4 E
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。
" p! d. H5 ?' L% a8 k3 }) q& @+ ^& z
! m0 Y3 K; G }0 z+ K
---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而
4 ~3 W1 p4 p9 @5 N* N& [- }
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
4 ]6 q3 M/ h( [1 z4 a6 N/ I
/ x* V% q' n& W) ]0 N
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
2 l2 Z2 ]5 C2 a7 W Y8 [% `
: A5 E) Z4 W: [# t4 y& z
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。
$ U' F4 W3 ], e' ~
0 p5 [( P6 s& _. P0 G0 O5 S
---- 例 程 如 下:
/ k5 n$ G- `4 D& ?$ s7 c6 |
2 S" F% A1 P' @
import java.applet.*;
3 }) f' y9 |5 E& y
import java.awt.*;
% B2 H' @6 G8 w! z
import java.awt.event.*;
, `, y/ ^) q; F" y! a$ Y( ~% b0 P
, |8 E. o$ l, \: x" k9 l
$ `, w& M8 g8 A' ?' e5 ^5 r
public class Example extends Applet implements
9 e0 D9 z( X0 y" C) F. H
ActionListener{ // public static void main(String[] args){
1 {' Y3 e; B$ K) A# e, ^) T' O
Frame win=new Frame("Example");
/ G; `, Y% c5 V
Example example=new Example();
6 J, t9 d; g, j& i) x. ^9 X" z7 w
win.add("enter", example);
* F% g& q9 m) U# j& ^! ]3 L
example.init(); // win.setSize(600,360);
( S# I7 n: p0 L9 L; O. L2 c; c
win.setVisible(true);
1 ? Q4 }1 ?, k, i0 z* W
}
* T0 a! z" d9 j9 s( |: [$ [0 ^
public void init(){ // Button button;
; P; e$ {. D3 t) W; N: F% U
Label label;
* c- U' I' H0 b% V
button=new Button(" OK "):
; b3 i* ~6 k3 ?
button.setBounds(280,200,100,20);
' W$ W! h$ P+ G0 e! ~( x
button.addActionListener(this);
8 }7 w& @0 w; \( B! c
label=new Label();
% @- z/ u" X3 Y4 W8 e
label.setBounds(260,100,200,20);
7 b6 ^! T; D# {3 ~+ H% p l
add(button);
) B- h1 Q& Z# p5 K3 b6 X7 S
add(label);
% y- b/ j: {, K! h1 ^7 ]5 t
}
t0 {0 y! f; t
public void actionPerformed(ActionEvent e){
+ c, \0 Q* f0 \- M4 k, S
Object source=e.getSource();
7 l# _; L' e; b4 }6 E
if(source==button){
+ q4 T3 b6 v) ]5 n" J9 U+ ?
label.setText(" It is a example !");
0 t9 f$ p, U2 E3 w( @ l3 {
}
7 A: F% Z+ d2 W# K% O4 n
}
`1 g& M, N5 y" x' F. I
}
* {3 v3 O( P9 R( i: {* U
: {/ z1 r& m! b% {; Q$ y
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
; P& S; l2 g0 B8 {9 y5 K. H
' \1 v3 I, V7 i3 \6 |/ b7 Y. t# d
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
, C% Z. _& K! Q
: S- S4 U! M7 f' p
---- 2. Java 中 的 发 声 提 示
% B6 a0 l+ K7 ~& d% W- h0 B
) K. `) \) k) J4 {8 U8 t+ y
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。
+ w+ L* A( b- R
, t, D6 D" {( b1 f: E1 @
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
) _! H: o/ p" w# T \
4 g) s2 N3 C, m! W. ?
AudioClip audio;
& o5 t( y K6 I/ Z' I
audio=getAudioClip(getCodeBase(),"Hi.au");
: A9 ]5 Y: S6 Z( ^) t
audio.play();
, |4 \0 H2 m2 Y& v# W* O
% v3 z* ~& e& `; Q2 ]
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
& A5 R+ ~6 I S$ e1 m
够 被 调 用 的 。
3 y& V" [: Q% U B5 \# @
- d. k- D9 P8 F! O" M
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?
/ e# I- m7 c' B7 j' C" n
1 s4 H5 |) o- I( [
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。
2 F5 c v1 C% g6 ]# A# P
+ b! I E4 s" |1 B0 U L
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
3 ^* m: R0 D3 _6 M# g2 {$ q J9 I/ p6 a
% L ~2 M* B G8 j" d
---- 程 序 如 下:
5 n' m( l& X; {7 ~$ @) Y
! s4 j" v4 k- [6 T+ ~( g
服 务 器:
/ P) d9 w L- P3 b+ J
import java.util.*;
% \: i& C6 \0 i. U5 L3 _
import java.io.*;
+ X- R3 O2 D2 G- F) U# |( D
import java.net.*;
9 d% Y: Y8 b' `8 d& V2 A9 m
import java.awt.*;
% Q& [2 k0 n; x
" d* p- ?0 V" Y- Y, o
public class ServerT{
. U" D; s! v9 a
public static void main(String[] args){
! ~! ] O% i0 Y7 \ a
Server server;
2 h2 T; z9 z, m3 @& ]: W
String clientRequest;
! C: d& s) r1 Z6 _( N: s
boolean quit=false;
" u3 V5 ?+ N+ u) m0 S
server=new Server(8001);
0 O5 _+ B0 ]# t! ?0 K1 M
while(!quit){
/ ^# [# R) m% @ v3 V: @6 y
DataInputStream keyboard=new DataInputStream(System.in);
7 M5 ~: j9 S$ g6 r' ?+ ^* m4 E
try{
' T9 N" C! ?) H5 f: n$ o
clientRequest=server.in.readLine();
& j8 b: j4 E# ~! v/ j% d. G
if(clientRequest.trim().equals("CLOSE")){
6 U ~2 z! |: \
System.out.println("Client says: "+clientRequest);
6 f: u. I# ]3 h* Y
System.exit(1);
, ~" J8 p+ e3 R+ \1 w
}
( |2 m0 i1 v* Z, [' r4 y8 R- g s
System.out.println("Client says: "+clientRequest);
0 N2 Q) _, n$ d8 E( C0 N
server.out.println(keyboard.readLine());
! r& C( D1 C. V9 \7 z. L9 l$ c
}catch(IOException e){
$ t" d2 w" W: Z# k2 I
System.out.println("IOException in server.in.readLine()"+e);
^! u% k: z6 ^9 c& |( C: ~+ m6 ^
System.exit(1);
# o: B+ A X9 Z
}
% |2 N9 N8 U: K6 |! W
}
# L/ y$ G5 x$ _/ R8 ?
}
% N/ R3 Q3 b, B
}
0 S" ~3 C7 Z) R5 ^8 w( x( Y" ^
class Server{
( C$ U4 U* i- D$ W
private ServerSocket server;
9 g8 O# @: J" a2 ~& Y( g& T
private Socket socket;
: u' H I/ `( r! s3 ]3 D
public DataInputStream in;
0 B, V4 H1 c5 W% I% Y
public PrintStream out;
0 j/ t4 Y' j. T1 K/ _/ Y) h
public Server(int port){
/ x O; K) r: x: v7 A0 [- @/ i
try{
& N3 O, I2 y; H7 s1 F' ^- y$ g
server=new ServerSocket(port);
& u9 K/ O! Z4 x2 ]
System.out.println("\n
. N p7 @1 W: j; E# w9 P6 x. b
*************************************************");
$ b. y* G4 E( @
System.out.println("\n @( Version 1.00 97/12/30 ");
. g7 G- l' |. [4 O2 a+ U9 D9 d
System.out.println(" Copyright (c) 1997
7 C! u# F/ L' q4 H1 g8 k1 u
(Lui DongBing) All Rights Reserved.");
6 d& i& f6 N# }
System.out.println("\n
7 k# z: ~: B1 i1 x1 N4 t; ]
***************************************************");
+ L- i$ f% a* z* D# Z/ N$ R
System.out.println("\n Server is: \n "+server);
' M* C' W! I8 o' d2 F
socket=server.accept();
1 c q1 [! j. m& B# Y W+ _7 e9 T
for(int i=0;I < 260;i++){ // 发 声 提 示
( F- H$ ~' L" @; M2 V! b
Toolkit.getDefaultToolkit().beep();
% D) w" f4 N- E7 N, p: J+ h) y, ^
}
, r% _1 M! w( l8 M
System.out.println("\n Server is ready ! \n");
) z- K; V- n& l) O7 f5 H6 K; Y# s
in=new DataInputStream(socket.getInputStream());
" W. x; R' h( o* A
out=new PrintStream(socket.getOutputStream());
+ o( D+ r6 S+ z
out.println("We connect in "+new Date());
\( e% z* }/ `$ W5 h" i C
}catch(IOException e){
+ _& ^+ U8 ^7 C" @3 i/ s+ r
System.out.println("Server is failied !");
4 N$ m& U+ X! d7 t; T
}
4 k+ ]; w1 X( L% u
}
) h0 j( I) u4 Q0 r7 Z# p! o* T
}
/ O0 n* W% V' l( h( u1 v
/ W3 I- J/ g; k4 g" D* m
/ U, F, _0 B9 j
客 户 机 :
1 d9 n& z+ _' ]% ^, a
import java.util.*;
; l9 h8 J* F) F
import java.io.*;
+ P3 p7 w9 C6 N# b- n
import java.net.*;
" E# n) B4 W! H( E0 I
1 ^4 i: t8 [) c7 t* c
public class ClientT{
1 w$ U# \, l. ~
public static void main(String[] args){
; r0 w+ v5 `( [) i. G9 k
String welcome,response;
4 G1 f4 g( {5 g2 j" ?
Client client;
, L4 Z$ s, Q2 K# v- W1 W
client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
! s; b4 W9 D% z) o! W' u1 o
boolean Bye=false;
9 j' P% l: p+ W* x& s" v' x
while(!Bye){
4 g8 |0 I8 K6 [4 \6 ?0 {. A
try{
4 L/ R7 o) _8 e, `
welcome=client.in.readLine();
) y1 P+ J4 R6 A4 t; c9 S/ n7 k
System.out.println(" Server says: "+welcome);
. J4 U5 s( z _$ L: i, W
client.out.println(keyboard.readLine());
# r. d, |/ D, W8 i+ L- n
}catch(IOException e){
. X, E. v; s* j C6 C5 R
System.out.println("\n The talk is CLOSED !");
+ X: E2 K Q5 S1 Y3 ^* J
System.exit(1);
' ^ g0 X+ b& x9 ^
}
e% `$ {) K7 y7 D+ N
}
/ O* O$ ~* _4 V1 Y7 C
try{
" d6 I3 x/ C# o8 l3 z2 l* `
Thread.sleep(200);
2 S% g: `& a5 K4 S9 j; S/ V: X
}catch(Exception e){
% {5 A% s$ u. H& {, X$ x" r; H
System.out.println("It is a bug !");
! X2 w& z- H' g: n* g* i
}
4 e+ ?) k/ O* w- N' t
}
# J% f3 J. I: G( L, a! V' H
}
( Z2 M4 U& p( V* g
class Client{
" W7 K- l4 S( l; r* N% U& ?
public DataInputStream in;
$ S! D2 {$ b4 e* i# G4 P" O; d
public PrintStream out;
$ M' I& ~8 ?' W0 D) ~1 v5 G# @
private Socket client;
8 i) ?0 N0 H" e1 V9 d1 v" \
public Client(String host,int port){
4 w7 F6 k2 [) y3 Z0 q( R" B- L1 s
try{
$ e+ B! M9 v% F' O. }
client=new Socket(host,port);
$ ]0 H' O$ {! [9 a: Y
System.out.println("\n
: Y" I" @" r) y- x3 T. R
***************************************************");
( B7 \" F# }+ A" q4 S2 A; E! x/ l
System.out.println("\n @( Version 1.00 97/12/30 ");
" j' v0 w( ~$ ]0 z* w
System.out.println(" Copyright (c) 1997
2 t2 d9 l4 o( t3 t% C$ |5 I
(Lui DongBing) All Rights Reserved.");
( X1 l% _: a3 m: O$ A% \* g
System.out.println("\n
) j, m& G7 @8 y9 ~
**************************************************");
& o: {8 _% U, O
System.out.println("\n Client socket:"+client);
7 t" G. U! j* \! y6 J
System.out.println("\n Client is ready ! \n");
! Y, m; _2 b Q" g T
out=new PrintStream(client.getOutputStream());
) o1 m/ M" I9 o% [
in=new DataInputStream(client.getInputStream());
) b7 z; N/ A% N' u
}catch(IOException e){
4 t6 l) x5 T; |+ L4 h$ [
System.out.println("\n IOException !\n"+e);
# v1 {" @/ ~# D# E. q$ N
System.exit(1);
' R) N: a/ b/ m
}
, r. B2 D/ C2 t7 {
}
0 K& @$ k3 p1 j% c" O* _' D
}
作者:
wangyu249
时间:
2006-11-21 15:07
xie le
作者:
zq1987884
时间:
2006-12-12 13:15
<p>不错</p><p></p>
作者:
wssl103050
时间:
2012-8-23 12:30
的却不错的啦 谢谢楼主了
7 F, F/ u1 P# O' k; y
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5