数学建模社区-数学中国

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

作者: god    时间: 2005-3-31 01:14
标题: [转帖]Java应用技巧
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。  - y7 G( i2 ]2 {0 X7 Z( n3 A+ C

  C" S+ O/ n6 x7 n2 J2 c/ V3 R---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。  2 D: ^9 {* p9 E! f' H' c: B8 A
7 ]2 a1 U; @" m. q2 o  S2 O
---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而  2 t" ~% ]1 c/ m5 I+ V5 I$ `
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。  - F# x& q5 Z* C; F! X. _; m& e
" ^, g: A6 P0 Z: h
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过  程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。  
$ n) }' a# Y  b7 X8 x
7 j+ I& i9 _1 S, w$ [---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init  ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方  法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。  ( t& b) d4 r2 r

7 E+ c7 _- k* T0 V6 j1 Z$ n---- 例 程 如 下:  / |( I. ?6 ~0 W) I
9 ~8 o  `/ w! L+ h# r
      import java.applet.*;  
/ Z1 \8 l- d3 N' @' h- C. g      import java.awt.*;  
) B6 J; A$ ]$ K) k, G/ i      import java.awt.event.*;  / e5 f3 `3 |# @7 ~# j* `
   + L* [  W  l& I: T
6 A, e% t7 t3 ^- ]* x5 x% g: ]
      public class Example extends Applet implements  
- x0 a9 ?, Z! _. n: |3 z                       ActionListener{ //          public static void main(String[] args){  
# ]! g" x" j& M% y( O5 H1 Q( b           Frame win=new Frame("Example");  
( l& v: X5 T9 Z4 Y! C9 S( x5 O           Example example=new Example();  ( T( v5 t) C# c4 E2 P. x
           win.add("enter", example);  
7 A6 D; I4 Y) P; b( Q& B$ f; L           example.init();             //            win.setSize(600,360);  
9 D4 r; ]# z& W7 T1 ?' Q' ?           win.setVisible(true);  
2 X: U4 K, g4 U. F( s         }  # `5 ^' |) v3 D! K
      public void init(){                        //            Button button;  # L2 |6 A3 @% m$ o1 }0 n
           Label  label;  " r9 v( Q' Q! S/ X* `% z7 A
           button=new Button(" OK "):  4 S5 j# y' N, p0 Z# K* B
           button.setBounds(280,200,100,20);  
8 \* X3 R# A  L$ K! L9 Y$ D           button.addActionListener(this);  0 B$ F+ {' K7 m) B; o3 t, g
           label=new Label();  2 h( I7 M: a) |; T
           label.setBounds(260,100,200,20);  
" _7 ?' @" ]; |- O  U, w9 k           add(button);  
8 k  c6 m1 p2 Z7 W. n           add(label);  
! q% d4 k2 D- ]% r- B8 H: T- R         }  
1 d5 x( S9 C2 \4 A& _       public void actionPerformed(ActionEvent e){  : @3 c. m: h% I/ m# m* r/ q
           Object source=e.getSource();    x5 a$ w% K% y& Z4 N
           if(source==button){  4 ^7 }: ^5 M) n
             label.setText(" It is a example !");  . t% _3 X. q) Y' B( R6 n+ v/ T) z# s- b
           }  
7 \0 ]' v* w1 B( L         }  
$ W5 q& ^2 \$ c/ Z: d  j& Z      }  ) J5 S/ U' q. s1 I

% f% E" Y, n( \; F+ o; R/ h$ x---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。  
- m* @* P( ?3 l5 b0 q! j* K% ~
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作  为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。  ' f0 s# b$ }& ~6 H2 [' [# n, V3 V& n

' O4 {+ p7 E+ Q, A) I4 k& U' _---- 2. Java 中 的 发 声 提 示  + S0 J# O- k6 G! L) [
+ S! _" z$ J9 D* x
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。  2 e( v9 z3 T& T6 a8 H# {& j

( G) ^' l. H/ j% M2 E---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:  ( \: q# N+ ^& e' j( G, t

: g: c- @$ `$ ?       AudioClip audio;  $ S1 m. u5 I" v( v: h* E. y
         audio=getAudioClip(getCodeBase(),"Hi.au");  + z* L" p1 z) A' c, {
         audio.play();    I$ l; {; V; V8 d) z

! Z/ t' K' v0 @5 T---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取  得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能  在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能  + ?' {2 N" g% m
够 被 调 用 的 。  & Q9 k3 V- j; N0 T- T

9 J# M, y: }. }) v/ o---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?  ; G# T$ H8 C, o" I  k% j0 z

/ S/ J( n8 t4 C; Q# W# u% C/ Y---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。  
6 }" O$ H  W  u; I% J# J3 S, X; t$ I7 }( ?
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实  现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。  7 Y5 a" @& w$ ~" ]& m9 U

- r' x- y. K: v" a---- 程 序 如 下:  
- C+ {' n* C& p0 s/ T2 X6 Q! k) Z: {% {1 p
服 务 器:  
+ X/ d, ]% r) t+ i$ x! p4 f% [3 Simport java.util.*;  
! M/ f9 m3 K3 R* m. Mimport java.io.*;  ' r! v2 m0 H$ F# c4 N+ L
import java.net.*;  
, O; ~! h3 C8 D2 v  P5 Limport java.awt.*;  
$ i. J, c# M' a5 I! B
/ g3 Y- z2 B: F7 hpublic class ServerT{  # P8 Z) T& ?% M% F" X  I1 [
  public static void main(String[] args){  
' `+ F) o4 T% s. ^    Server server;  
' q: }0 t2 {$ p0 G    String clientRequest;  
5 M! B: }9 o: E3 M( L    boolean quit=false;  . w& v. G0 H1 p
    server=new Server(8001);  
0 L9 o# s- M9 r9 K7 x* t% }: b    while(!quit){  
& q! Z/ h" i# u      DataInputStream keyboard=new DataInputStream(System.in);  
% h. D' A* p6 z2 R' ~( J- t0 d      try{  ; _( M4 \& r. R) [& `0 N. N
        clientRequest=server.in.readLine();  
  j: a9 Y9 X" |        if(clientRequest.trim().equals("CLOSE")){  
0 B1 [; q/ [' Q: u+ U) S' m          System.out.println("Client says: "+clientRequest);  
5 n, L$ v5 Q( w1 x# X4 M2 a$ {          System.exit(1);  9 b0 e! a0 z4 i; {* }# f8 M
        }  . f) g6 G5 o1 L' \! `% J
        System.out.println("Client says: "+clientRequest);  4 L* r: b( p8 ]. g, N
        server.out.println(keyboard.readLine());  
6 p0 I+ L+ M) z1 J1 \       }catch(IOException e){  - u8 ]/ r3 e5 D5 W+ _. a% c
        System.out.println("IOException in server.in.readLine()"+e);  
8 A/ m% x* G- C; y# v        System.exit(1);  
6 O! C- u) ~5 G; v8 `8 |- y; T      }  " T6 A- Y8 i/ Q; {( q( o
    }  
" O" h- `  n  ~) B0 z  }  5 O# y7 `2 G3 G% Q: A) \0 V. c
}  
9 r, a( V: o- x8 |- e- ?$ H* U: [/ Uclass Server{  ( `* l( ^! n# H  n
  private ServerSocket server;  
% v' z- Q4 ^9 Q3 z, d+ {  private Socket socket;  
. V! a4 n% }) u8 d' v+ d3 D& _/ c  public DataInputStream in;  
4 L! b( b. W" j1 c  public PrintStream out;  ( i$ |* C. o% @
  public Server(int port){  
& Q( _: H' X  N& Y: q' b    try{  ' o/ S* x4 K3 C5 H% Y( w
      server=new ServerSocket(port);  
' e# T0 F9 g3 |" V+ @8 g! e      System.out.println("\n  ! a5 y* W4 L% R6 ?/ V! M7 E
*************************************************");  
3 z1 L9 Q: U) q4 B      System.out.println("\n @(              Version 1.00 97/12/30 ");  
2 z1 Y4 A, `  O6 k3 P$ |. U6 p      System.out.println(" Copyright (c) 1997    d0 ?' U* V/ U: E+ Z3 ]
              (Lui DongBing) All Rights Reserved.");  ) U* ]' d( W$ S7 R) L) y7 K
      System.out.println("\n  * T+ u6 Z4 t; r6 v# C0 H
***************************************************");  5 k- l2 y$ L9 g/ P
      System.out.println("\n Server is: \n "+server);  9 y4 F6 O3 b$ O7 C! k  }" R& N
      socket=server.accept();  2 P. A% c/ ]  d$ D. U' W) |
      for(int i=0;I < 260;i++){    // 发 声 提 示  ! D- P) ]7 h! m/ j; y6 C
        Toolkit.getDefaultToolkit().beep();  9 Y2 C) j* r1 F& o. l7 x2 y) p
      }  
% c3 r1 k+ ^& Q      System.out.println("\n Server is ready ! \n");  $ w( M' |7 S& G% H7 k% a7 m: |7 X
      in=new DataInputStream(socket.getInputStream());  & ?* [6 }4 z8 C# b
      out=new PrintStream(socket.getOutputStream());  - s2 w7 R" ]6 O) W  m
      out.println("We connect in "+new Date());  0 B  j9 \1 ?3 P+ o- o
    }catch(IOException e){  
+ s6 h3 t# W0 y      System.out.println("Server is failied !");  * ?# k1 d% f" q+ O
    }  
8 K1 f1 _. p) D) \  }  6 h; A( k" c) S. ~5 b. j) P
}  % C" f: r' j. I  z
   
+ y& b' _8 k# p6 w  X/ m! i4 `/ Y# r$ K3 m
客 户 机 :  
  ~: Y  V  y5 Y$ ]3 p" M* vimport java.util.*;  
% f+ f- B7 [2 Uimport java.io.*;  
2 A8 e6 k) ]& D- C2 Iimport java.net.*;  
6 o  L% E" C8 e5 N  E9 h6 b) N1 @7 ~
public class ClientT{  
& d4 q; s$ @1 }' z5 _0 S  public static void main(String[] args){  / S; X2 h8 f/ F# v. O3 c
    String welcome,response;  
- B; K$ M( T* t6 W    Client client;  
" W) K" ]4 G- t% m: i- p1 H    client=new Client("202.120.80.20",8001);       //      DataInputStream keyboard=new DataInputStream(System.in);  
8 k! {6 J$ {% e2 g% ^) ?! A' t, m    boolean Bye=false;  
: ^' `# I: ~) V" g7 b    while(!Bye){  " X" M: s7 h  i) A. Y% _. p( N
    try{  ; S' a3 }3 A  H& e2 Q
      welcome=client.in.readLine();  
# D% W$ r4 q# \; O- g      System.out.println(" Server says: "+welcome);  
. |. ^. t* \( l( T0 }& c      client.out.println(keyboard.readLine());  
% i# [; I9 a6 k/ _9 L8 y$ _     }catch(IOException e){  2 \: [5 y# F8 c, G8 Y
      System.out.println("\n The talk is CLOSED !");  
0 H7 o7 |: a; ~$ ]! G' @      System.exit(1);  
* s9 J* _, z$ {! g# I. F1 Y    }  5 p; C& I: w4 w# H; n
    }  
6 K* N, z: }8 j1 C, M; w+ k1 ]    try{  3 ?# y' G: ~2 \9 z3 X& @, }
      Thread.sleep(200);  
/ y( S: q4 d7 Z/ s( J    }catch(Exception e){  " F4 Q# F# r/ b% N' _
      System.out.println("It is a bug !");  0 L9 {/ f- |5 a* p& z4 Z# A  l
    }  * j* ~3 H* |% p. N9 R0 ^
  }  
$ w( `4 O0 t1 n3 w# C6 I" I  Y}  
( k/ E; E3 B. I/ \9 Uclass Client{  2 K- Z" W2 Q1 @: L
  public DataInputStream in;  
0 m4 V: p/ d. Q0 ]* `6 R  public PrintStream out;  
( u  `2 V* i( h9 s  p( \+ [  private Socket client;  
  X9 d) Y- U  I/ I' a# l1 p" _  public Client(String host,int port){  
# a/ ?. u* g/ M2 P/ u" R    try{  ! v# {) p8 c& E4 |: Z' k9 e  ^
      client=new Socket(host,port);  
% _8 R. `* V& C. r! s      System.out.println("\n  / x$ J+ L4 d- }( t/ w& s9 V' D
***************************************************");  
6 d4 Q; G3 n/ s- g+ y4 }      System.out.println("\n @(               Version 1.00 97/12/30 ");  
* X0 _& Z7 k9 b- M0 w' H* S5 U      System.out.println(" Copyright (c) 1997  " h" l" L: @, r- r. S% P5 ]+ @0 Z
          (Lui DongBing) All Rights Reserved.");  & [* {, H% d6 G( ~3 U0 B; n
      System.out.println("\n  . P8 _' |/ u, Y/ V9 \
**************************************************");  8 H5 M7 N# S# @. |* a
      System.out.println("\n Client socket:"+client);  ( J5 h2 p& [8 W8 b: [! y/ q
      System.out.println("\n Client is ready ! \n");  8 T/ V7 G9 Q6 V2 F
      out=new PrintStream(client.getOutputStream());  
- t% ~6 g8 `( Y* ?) @5 y: h2 L      in=new DataInputStream(client.getInputStream());  
, r+ F5 _5 y0 B, Q' i     }catch(IOException e){  6 W. J* p4 L! W0 P
      System.out.println("\n IOException !\n"+e);  
: Y. w2 y- J, w- E      System.exit(1);  1 S# K5 z. M8 w4 \" B
    }  ' ~, ]8 i1 `- z/ A: F$ v1 z
  }  
9 X0 ?, a7 p& C( Y0 x}
作者: 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 O8 B$ Y  k- g* m; l4 v





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