数学建模社区-数学中国
标题:
[转帖]Java应用技巧
[打印本页]
作者:
god
时间:
2005-3-31 01:14
标题:
[转帖]Java应用技巧
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
2 m- r# P" R9 d9 G
P2 ]3 I" y# Z- L0 v4 {
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。
4 N( Y3 A* A. G. q' I8 [5 s& q% l; ]
' T) X: m/ Y0 D/ V M2 M
---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而
0 M2 d @- q, u
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
0 c' }1 c6 x" E, h
8 w& ?; o. X; t; L: v
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
6 t" t& p& `0 I
: Z+ Z( ]- \: @ G
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。
: k6 Y1 B6 ^9 r+ n' Y5 g0 {3 S" w
- x) f% P, M1 G! A8 v
---- 例 程 如 下:
3 x1 m8 o% Y+ R" M. I
9 |* S5 e4 X p/ K- A
import java.applet.*;
* [4 b) Q& S0 x. l0 Q! A9 d
import java.awt.*;
; C! I6 W6 n" Y2 `* a4 U _
import java.awt.event.*;
5 J9 _6 m+ [2 X; Z
- A7 A- Q% c: Y" G+ B
) q1 C- e7 g; l( @( ^$ v4 I
public class Example extends Applet implements
% x. U) K9 _& G
ActionListener{ // public static void main(String[] args){
+ ?' X5 S. [7 N, {
Frame win=new Frame("Example");
8 T6 B u: p# L K) W
Example example=new Example();
) t% P% e& b: O7 \* p
win.add("enter", example);
/ D) k/ V6 @8 b
example.init(); // win.setSize(600,360);
4 {) e, I; W4 \$ q3 n
win.setVisible(true);
# n) X* I) w) v4 ^) J0 v! Y6 u2 J
}
4 J$ v; B2 x, h- m
public void init(){ // Button button;
2 V. i7 c$ D* w
Label label;
7 \ `' U. p5 n* ^
button=new Button(" OK "):
/ i% `4 p5 h2 `
button.setBounds(280,200,100,20);
) O$ S, O. F8 g7 A3 _% Q8 W5 v9 Y
button.addActionListener(this);
7 V6 m' i6 A4 L) y ~: g' r
label=new Label();
) ?) ^6 c- X' N9 z# w u. C
label.setBounds(260,100,200,20);
+ M" y) ^7 J9 r
add(button);
& L6 m/ s( O5 F. F' ~3 k; y
add(label);
w0 \ T" L1 h! s
}
& a% x) K9 F* ^4 p. j, H7 J
public void actionPerformed(ActionEvent e){
s( X- _" O$ W% O2 ^; h( J
Object source=e.getSource();
9 H1 {$ R% y% y" T9 F; o/ l
if(source==button){
+ e$ K) R0 G+ ?* i( }8 F& X
label.setText(" It is a example !");
' r- p# s8 R* \
}
' ?2 Q2 O# \. k6 I$ {8 L
}
+ ^% H1 {- p7 J5 Y* z* {# E5 [
}
( n5 S6 U. w& v$ o
* A: d3 I1 M; z6 @+ o
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
2 p5 @" o, x) r% }( O* D
* ^' M6 w# g1 D; R
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
# @ ^* q% b! @* q
3 ?6 k9 S4 w, }
---- 2. Java 中 的 发 声 提 示
! t' e; k0 X: w( U
9 o8 `2 e8 M# i1 X( I: P8 ^% N$ ^& g
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。
& _2 ?7 O/ }1 @% ?4 [- \- ?# y
' N- I% R+ } j% i0 m8 }! e
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
8 G6 l2 w/ M- @* H5 A; C& Q
8 [- I$ h9 O5 x$ D; V$ w* V4 w
AudioClip audio;
- m5 m% w3 A Q3 m% K) _1 J
audio=getAudioClip(getCodeBase(),"Hi.au");
% K+ T2 [% G0 U `
audio.play();
& {( Z- E6 \6 `9 w# [9 P0 g+ v
( h7 w. H0 l6 N& Y5 ^" N, F2 b2 s
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
4 e3 C0 n& c; M5 S( e
够 被 调 用 的 。
/ G5 x% p6 q; a) h& E; D
4 f, Q4 L# \. O8 H# J: y
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?
/ C$ D8 C' ~4 B' C4 G" ]$ d, I
( _; b$ ~8 F- i
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。
4 F3 V* U, K* q
. f6 a* Q+ W/ j# V- I% ~0 k0 `; V
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
0 d7 r4 H" F" X( Z
4 t4 ~" i( L2 b0 E- h0 z+ r: D; T
---- 程 序 如 下:
^. I, \$ N1 l( G6 ]% `
7 N2 z. p3 b( _/ P
服 务 器:
3 m) b9 E x7 U6 [+ j% D
import java.util.*;
/ ~, e6 G" [ v; k9 l
import java.io.*;
; G* G; Q: @" [, }; I" E1 @9 x
import java.net.*;
7 ^6 f, C5 T2 s3 o8 B% Z8 T
import java.awt.*;
e6 b# w8 u4 C2 q+ S# M2 O) \
! E, X, y" D t d5 d! Q
public class ServerT{
- \- w- G. [$ u) p* f, v( d
public static void main(String[] args){
' h" [$ |' Y: v3 s! Z& U% X
Server server;
8 {3 P v' @. Q6 F" s
String clientRequest;
2 I) p! M. v7 g
boolean quit=false;
; E1 ~% e1 o2 X/ l2 t8 Y0 i" y8 _
server=new Server(8001);
7 O' t d9 p( X% Q. \
while(!quit){
! B# i4 p, ?1 ?* T5 G2 d$ T
DataInputStream keyboard=new DataInputStream(System.in);
* k' p* u7 f1 h# P
try{
4 U. o5 }$ \0 k8 q- [
clientRequest=server.in.readLine();
* D) y1 F, J& b+ r4 ~, T' O) k
if(clientRequest.trim().equals("CLOSE")){
w; x& j5 K! B* T* n* y
System.out.println("Client says: "+clientRequest);
8 V0 L3 u, o C
System.exit(1);
I. L& m) u% s6 M) z0 S
}
# n. t+ d2 D0 U4 G* L& n4 _% k
System.out.println("Client says: "+clientRequest);
& M; f3 m, E2 L- I
server.out.println(keyboard.readLine());
7 Y; ^* M8 W; S" [' A% J% h3 U
}catch(IOException e){
: r! o0 n7 M O2 }) D
System.out.println("IOException in server.in.readLine()"+e);
# C# b" }. d; l Y
System.exit(1);
$ R& d( h4 T& G/ J4 z
}
# h7 [0 e$ y& f' J
}
4 q; l* i6 B c1 D. A
}
( _ D* J8 o# E* j; B- O
}
2 h; Y' u; p0 v
class Server{
/ @+ `. Z; \9 {* Z
private ServerSocket server;
: H: H% J- M, b; d- ~
private Socket socket;
+ _ W0 h5 J6 ~
public DataInputStream in;
: Q5 x4 B! y- O8 l
public PrintStream out;
/ A; s. q' y2 o' Q
public Server(int port){
- p+ p; f! C7 H( M" @% n' |$ z. | W
try{
% f9 V5 F5 ?5 I
server=new ServerSocket(port);
* O7 W- q6 E/ v9 T! i
System.out.println("\n
3 k% b ^/ \% O1 @' Z
*************************************************");
& Y# t" y" S7 L6 ]# q
System.out.println("\n @( Version 1.00 97/12/30 ");
_, \7 R2 R: j& |* a" I: b
System.out.println(" Copyright (c) 1997
' q4 x7 ?: V! |$ O. W* q# q# j+ ]
(Lui DongBing) All Rights Reserved.");
* q& _. J3 N; |4 m6 _& l
System.out.println("\n
' C9 c+ o' w6 A( b0 G; [
***************************************************");
' L! r. T. T4 G$ w# a
System.out.println("\n Server is: \n "+server);
; `. J& }# W4 x* W
socket=server.accept();
- j& I- T: n Y: t' J
for(int i=0;I < 260;i++){ // 发 声 提 示
7 S' ^" m) _6 E' n+ x/ X
Toolkit.getDefaultToolkit().beep();
7 x8 s: ^4 x! t, O
}
* h8 h$ d1 x+ L! @5 [
System.out.println("\n Server is ready ! \n");
" O. h( ~- B) o/ T( @& z2 P
in=new DataInputStream(socket.getInputStream());
0 v E! e3 |' n6 Z* I$ Q
out=new PrintStream(socket.getOutputStream());
2 P" D/ j! ]* u% `& d" R
out.println("We connect in "+new Date());
4 y! A1 c& b! {6 \7 o
}catch(IOException e){
5 s9 O! ]; o ?1 ?8 N; j7 N
System.out.println("Server is failied !");
4 d2 r9 `( c% K4 b# z
}
/ s; @7 i0 m j, P: y/ ?' e" M3 C% W
}
% I( ~) S" |- o
}
3 Y; m" x; B2 @. q
3 r3 O- ?; Q; r+ p
v' J+ u: _" A6 b: l% U/ g
客 户 机 :
- X1 L& k$ Q4 c2 j4 E3 _
import java.util.*;
& V& v/ N1 U& f0 d
import java.io.*;
+ x1 U3 W# i& Z( g
import java.net.*;
# c5 z, \$ _5 G/ _0 b" H+ N. o
6 [5 S3 b" j. U J: c0 @* w- B
public class ClientT{
' A, N* A( f. R% B& B: S+ I& N+ n
public static void main(String[] args){
3 W# `% F" z: {0 [, \4 {1 {3 S7 T
String welcome,response;
3 m- b1 \9 E' n. H
Client client;
: t2 w4 D1 b: _: |1 L( e
client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
2 X+ d9 E7 |6 \6 v5 C6 w$ S( e
boolean Bye=false;
% Q# A8 |4 h' Q3 P. {% N9 W
while(!Bye){
1 [* R0 f H1 X7 s/ Y/ B- x$ G* T* r
try{
: T( x. U0 d6 K- G8 O( D( C3 j
welcome=client.in.readLine();
5 N- @- R& u- x$ d b6 E3 @$ w
System.out.println(" Server says: "+welcome);
5 Z7 g0 @9 I2 o4 `" W
client.out.println(keyboard.readLine());
0 V& C: n4 X/ v" ~& o
}catch(IOException e){
' a# i# n% x* F
System.out.println("\n The talk is CLOSED !");
7 b; s/ o( f: q- @( {1 ` H) D
System.exit(1);
, c* B6 y. `1 g; G) j0 D# z
}
! \2 V" U+ M: ~
}
; J2 u" W6 O# V9 h& v7 b
try{
2 `3 N' X3 P5 G0 y: R, `% W+ \* w
Thread.sleep(200);
) I/ ~7 K5 ~$ R
}catch(Exception e){
' A9 z% t: U$ q8 S
System.out.println("It is a bug !");
3 o& @' T5 K2 y# P2 N5 T
}
: P! T4 ~/ b# J( g: H3 ^
}
; N( T2 C6 c# k
}
7 I# y! s' t' m& X& `# r$ L1 r$ o
class Client{
1 T- H9 w! }) P) g
public DataInputStream in;
4 x) L; f. Z& L+ u1 L
public PrintStream out;
" b$ b' u, t1 j$ x3 W$ x
private Socket client;
7 `+ e6 e( A) y$ G+ r7 s+ x" R
public Client(String host,int port){
" M b1 ^1 v/ c @5 m0 p% M! ?
try{
8 g+ O8 i7 |. `1 f* `
client=new Socket(host,port);
$ l' X8 r/ T' D2 Z
System.out.println("\n
, z7 w1 `: W1 S. O: Y2 y7 \. H' J7 i
***************************************************");
$ w1 P/ V+ e4 N6 a7 q
System.out.println("\n @( Version 1.00 97/12/30 ");
& G* @# R- l9 Y; K- `( X
System.out.println(" Copyright (c) 1997
* K; v* J I5 B9 A. J
(Lui DongBing) All Rights Reserved.");
9 S4 Z+ j- x$ `
System.out.println("\n
7 d, ?, P! M. f: u" D+ e; W
**************************************************");
( g' e7 ?5 D: \5 U8 }
System.out.println("\n Client socket:"+client);
; ~& K8 g! t9 i y0 `( k
System.out.println("\n Client is ready ! \n");
* |; Y6 b, @2 e( s: @
out=new PrintStream(client.getOutputStream());
0 Z' p7 W" C' h" p0 o
in=new DataInputStream(client.getInputStream());
! c. ^! L4 A1 V: g6 u4 x. ^& L
}catch(IOException e){
# S$ t1 i% P# k$ E: C6 b
System.out.println("\n IOException !\n"+e);
! |* Z% _" K/ Q$ R" s i$ c
System.exit(1);
! D& d8 I$ l* L
}
9 X- F2 k- d2 _
}
/ p6 P9 ? r# b/ L" H4 r. R, G
}
作者:
wangyu249
时间:
2006-11-21 15:07
xie le
作者:
zq1987884
时间:
2006-12-12 13:15
<p>不错</p><p></p>
作者:
wssl103050
时间:
2012-8-23 12:30
的却不错的啦 谢谢楼主了
3 q. q, d# P. C* M) X
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5