数学建模社区-数学中国

标题: [转帖]Java应用技巧 [打印本页]

作者: god    时间: 2005-3-31 01:14
标题: [转帖]Java应用技巧
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。  
* }9 [3 ]( w1 s0 l
2 S( s9 Z: \/ U---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。  
. |& v7 v8 }8 {4 p1 e# [/ a3 t
) ^- ^" U) F- w2 K& ]& l---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而  
1 K; d5 \  o, r/ [) V- y3 dApplet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。  ; X2 D" A" o4 I+ w- x0 U/ o
8 {8 E& I6 Y& e
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过  程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。  
7 d8 j6 f- ]( d% X2 ]) F( O: `# g+ u3 D) |1 W9 S/ B8 H
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init  ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方  法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。  
$ @3 L5 F  `! O" Q8 r7 _; q' z( k2 D; g( p/ X
---- 例 程 如 下:  4 l, L* `( O8 Y: P- a7 i; }

( o+ k% g' B) R0 z6 }      import java.applet.*;  
! E+ r* G- g: D      import java.awt.*;  * Q6 z% N" R  q6 j, G
      import java.awt.event.*;  
, d' I- D5 J$ F! m: e8 i2 ^   + P$ G, h" a/ b! ^

& J8 n0 q4 }  M  j- B3 \$ t      public class Example extends Applet implements  
# P' C; }# G. o6 F& O/ R                       ActionListener{ //          public static void main(String[] args){  
8 e% p0 W4 S# q. Y1 m, L           Frame win=new Frame("Example");  
# g  o: j( U% @( Y3 F- e: Y# P           Example example=new Example();  
, ]2 O) h% c5 y- Y           win.add("enter", example);  1 P4 G1 L* `9 Z) S
           example.init();             //            win.setSize(600,360);  
" r' K/ N" p. q3 H  L  |6 B6 M$ W           win.setVisible(true);  
% D- s$ {+ F% k( x  h2 _         }  : T) N+ D, W" N+ e
      public void init(){                        //            Button button;  
- J; s' w" v9 Z" y* R/ J7 P5 T8 M( s. v           Label  label;  6 R- m( K' e, F3 X
           button=new Button(" OK "):  / X1 e, X! \$ \, h4 D0 e% k
           button.setBounds(280,200,100,20);  
) Z0 Y* g2 U" b           button.addActionListener(this);    }$ g6 S0 S( b7 L% \
           label=new Label();  8 C! `0 {# I: P2 `* ?/ O- C
           label.setBounds(260,100,200,20);  ! K0 m- L2 x' L3 A
           add(button);  9 x- k; b9 G/ O3 }' a4 w
           add(label);  
  H2 n7 Q, N  d# J9 X. O2 Z0 Q         }  
) L9 E1 @: U$ S' c* e4 a  s2 X  i       public void actionPerformed(ActionEvent e){  / }: L; T" i+ X7 o$ S  D: l
           Object source=e.getSource();  ! ^! y5 I6 e  T) j# D& r9 l3 e
           if(source==button){  
6 s, D& L0 @; d: P* F0 @             label.setText(" It is a example !");  ' x2 M& [' x3 U( u: s
           }  
% o  G& n5 G+ R3 a2 a/ R8 |         }  
  ~1 \7 ~! K4 o9 X, l+ S      }  
4 G4 m/ z0 J' a# y( g, x3 K, P; e
( b( ~9 s# Z4 u8 R. X. i3 ~---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。  ! m  ~8 v! Y. `4 A# N; t, F1 }
6 ?9 V# g, ?1 d0 m
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作  为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。  
: l& X5 z. k4 J6 x2 a9 S: g/ i* K  d8 F9 p* H! F
---- 2. Java 中 的 发 声 提 示  ' @1 h" [( h) L% p  W
1 Z; h+ s- y! L( k2 y% M8 ?- g
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。  " v1 F' H2 L  R1 [
* j6 ?" O  j+ g* L( a6 }8 ^
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:  % d9 W5 L' |# d( Q% [9 O) ^

& r6 B6 e# u5 ?2 G, w       AudioClip audio;  
8 t9 i" p! X! P% Y/ ~         audio=getAudioClip(getCodeBase(),"Hi.au");  - m+ [8 j/ m  C0 p( _. P, l
         audio.play();  
& b- Y( T5 x/ g; @" n! k- s  n2 E/ p9 \- s
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取  得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能  在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能  ) @8 G  Y# I' z
够 被 调 用 的 。  4 ?9 a6 z- u6 y) y* D. `

6 e. G6 @( w% c+ Z2 K6 \( N---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?  
, U$ r0 e. T, U  _# h/ m
/ p2 ^  R. V, P) [+ [4 z---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。  : r0 L5 @2 w1 O6 @3 |5 X+ f
, {: |8 S, f* C% b' N3 _1 d
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实  现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。  
+ n- ?( s5 b* Y2 I8 b- e$ R, c! u1 l9 j- I: J7 f2 m& [
---- 程 序 如 下:    H( J7 {& @% V9 ~5 l+ k

0 `, X; K* q2 ?/ T, C+ B 服 务 器:  # e7 D  [' x8 h* d9 Y$ U+ V) R
import java.util.*;  % I7 j3 n! @( M/ `9 T) c7 Q+ Y+ q. g4 m
import java.io.*;  
0 `( C' o* ~9 e8 t  F6 O) e: `import java.net.*;  
- Z* n! ~3 S$ \! b- |5 Oimport java.awt.*;  1 N& w: A% O! ]+ D3 ^( x! t. \
9 ~( M" I+ z+ j2 g7 v
public class ServerT{  
' E; z' a$ |2 v* K; E  public static void main(String[] args){  , U% P/ c! h  Z2 M& ]# s/ M
    Server server;  / z9 j" Y; \3 [3 o5 W5 K) v# ]) k- o
    String clientRequest;  
' z' {: k' I, r% S5 m( [    boolean quit=false;  
6 k1 e0 M9 {7 R7 J# F. \    server=new Server(8001);  
5 w6 A) g4 ~; i6 }    while(!quit){  ! P' K, w4 q) w
      DataInputStream keyboard=new DataInputStream(System.in);  # R4 Q% j- m* @# N! E
      try{  4 o) h# e% k+ }# p, _: e" Y9 e
        clientRequest=server.in.readLine();  
$ q8 m! V4 \2 n. {0 Y( \% I6 g        if(clientRequest.trim().equals("CLOSE")){  
! }& m& {3 U/ \: }+ o$ P          System.out.println("Client says: "+clientRequest);  ; F! {5 t" j. O1 N; n/ i; a
          System.exit(1);  8 B2 p1 c6 p' f
        }  6 a6 |; P: h2 {* ~( }9 s
        System.out.println("Client says: "+clientRequest);  
7 Q) C, t" q# g. f: b! Y. \        server.out.println(keyboard.readLine());  
, p; T1 b6 m0 d) [       }catch(IOException e){  9 Q4 ~. Z; S! u. q# }: N
        System.out.println("IOException in server.in.readLine()"+e);  # Y+ }" r$ J: c& g% r  F
        System.exit(1);    T0 q: v, \% ?9 ^6 V, Q
      }  
& Q$ v0 `" a. r) V* y! k5 V8 s    }  ; V; H, C& ~! }7 {1 T
  }  
/ L' m9 a9 s! w) E0 ^}  
# M  e+ |+ u1 H* X1 H6 ?2 Qclass Server{  * }6 @' ^9 n# E
  private ServerSocket server;  ( |. i1 D. o8 s3 Q/ y
  private Socket socket;  
  ~  i* Y9 |$ d  public DataInputStream in;  
* s$ ~$ N. N) m( w4 x  public PrintStream out;  & U) `% E6 i" H5 Q0 z
  public Server(int port){  
0 O) s( \+ s  ?: A2 ^3 U    try{  
* B& N7 [1 V# _* D' S      server=new ServerSocket(port);  
2 `: c$ }6 L2 f0 h3 n& F. g, k3 M/ C      System.out.println("\n  6 f1 w! M3 R7 j$ ^/ _
*************************************************");  
$ g9 f, `1 N) i0 h( Q      System.out.println("\n @(              Version 1.00 97/12/30 ");  
( p) J. [/ a( l1 U( |) I      System.out.println(" Copyright (c) 1997  
: `$ p; G( m! ?4 W/ E' R              (Lui DongBing) All Rights Reserved.");  
% X: _! w7 |0 {, U& q: z& D5 a: l& N      System.out.println("\n  0 |; I  j2 k9 j/ f' _
***************************************************");  - ~. C3 l! w" I% G  G) L8 Z# T
      System.out.println("\n Server is: \n "+server);  % c0 d& a& R; h! \) O! H# x) r% E  m
      socket=server.accept();  , V% t6 e1 v4 \
      for(int i=0;I < 260;i++){    // 发 声 提 示  . k+ V% g! C) K. W3 u$ ^: D: f
        Toolkit.getDefaultToolkit().beep();  ; d& J6 }7 q* }4 q0 G# _& C( j
      }  " \" y7 s5 W7 f3 i5 s2 E- P6 M
      System.out.println("\n Server is ready ! \n");  5 W3 ?1 ?3 k/ D/ L) v
      in=new DataInputStream(socket.getInputStream());  
5 m( [! Q3 I% b* G% M      out=new PrintStream(socket.getOutputStream());  
1 P/ B: n# G6 K$ e+ J      out.println("We connect in "+new Date());  
2 R* b; }; r8 T1 G    }catch(IOException e){  0 O0 U; }1 a9 c1 g
      System.out.println("Server is failied !");  " k( ?* Z6 ?: g
    }  
3 e- t8 n. `0 [  }  . {* `8 `; m* a* m: P; G# |
}  
2 c/ G: ]) H$ H, J* k& f' O6 e# J8 ?   
& j- H8 e. b3 t# m
  F3 q7 ~6 s5 r$ r/ e- D 客 户 机 :  5 O& U- {$ l, D. A8 f6 n+ Z
import java.util.*;  1 Y" ~( v1 `! b5 g8 ^, k
import java.io.*;  7 Q1 i2 E: l( O2 H# ?7 `
import java.net.*;  
. \8 f# k8 R8 Z* x' |9 c. W, _3 M3 Q8 q, Y0 _7 J: p" t. o
public class ClientT{  
% K, f+ `! B: ?6 ?! r  public static void main(String[] args){  - S! |/ g! V: |/ h+ X8 p# L2 p
    String welcome,response;  
/ Y- x+ k& Z+ I. ~  ]    Client client;  
2 G* U+ R( @0 e    client=new Client("202.120.80.20",8001);       //      DataInputStream keyboard=new DataInputStream(System.in);  ) y9 `0 _( b$ Z0 }% t& K' m" u  d
    boolean Bye=false;  ' r2 {( k8 o9 s( N' q
    while(!Bye){  
" A0 |$ g- G; W! w& W    try{  9 k1 w% Y2 z2 P
      welcome=client.in.readLine();  ) S! a1 g7 i( {2 m
      System.out.println(" Server says: "+welcome);  & O- \* D2 r1 M2 i5 w
      client.out.println(keyboard.readLine());  ( Z* O9 I- l( h
     }catch(IOException e){  
! [$ p  h; i  b" _      System.out.println("\n The talk is CLOSED !");  $ J, X6 M2 B: x4 Z* \
      System.exit(1);  
* r* g9 ~* o4 a: h0 H$ m6 ]    }  ! h# ?$ D0 p7 y. `5 L
    }  
( m1 i8 p+ x7 Z9 z7 i* s! a' F    try{  
# N" R5 l. S8 g/ w      Thread.sleep(200);  
# p; l1 e4 F: j% q* R    }catch(Exception e){  ) y' {2 H# F7 x( n' I8 |1 L7 B5 U
      System.out.println("It is a bug !");  , Q. K3 u, l4 b3 G4 H: [% K6 S
    }  5 V. T# P; `* n" Y/ O5 v
  }  
/ k0 i! t! J( T; \9 q}  
% s1 O1 x! m/ z' C) C/ q( Kclass Client{  1 y5 M" p: L, c3 C$ P  Z
  public DataInputStream in;  - k1 e9 c% M' R9 m
  public PrintStream out;  " Y6 U' T) [2 |7 E8 f
  private Socket client;  
; t2 i+ N) K: T3 h0 E- }6 F  public Client(String host,int port){  
3 J& E# ]5 z5 \& S- |* g9 g    try{  
  }  S# h2 X" s$ o      client=new Socket(host,port);    u' O  ^# d: U
      System.out.println("\n  
1 l: c/ {" A* g# O; j***************************************************");  0 O2 L1 T4 L2 b/ M( P
      System.out.println("\n @(               Version 1.00 97/12/30 ");  8 F" |- x4 i* _4 Y- }( I: k
      System.out.println(" Copyright (c) 1997  
& ?; c( v1 B6 ~5 G1 ?4 M9 T          (Lui DongBing) All Rights Reserved.");  
; P( U  U9 `2 r: x' V& }      System.out.println("\n  ) A* U* F2 C; B; i! k+ z* c0 x1 _
**************************************************");  
. c  {. Z5 q0 z      System.out.println("\n Client socket:"+client);  
( R  u2 |6 X( d4 C/ t      System.out.println("\n Client is ready ! \n");  ) g' f& ]& [. a; \' K8 A1 n
      out=new PrintStream(client.getOutputStream());  
) r4 w" k$ b' M1 l; m: ~- c* v      in=new DataInputStream(client.getInputStream());  
2 d( \, |1 I, \. _/ R     }catch(IOException e){  $ ~" G" `7 r" [. d& i
      System.out.println("\n IOException !\n"+e);  
6 M+ i  w3 H% T. r, R      System.exit(1);  7 c, [" x3 M: h# a. e  f4 P: M
    }  % D' P- Y. ~& R8 B+ q
  }  * }' R- Y& T% 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
的却不错的啦  谢谢楼主了
& Y- a# s: K9 h+ q  {. n




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5