数学建模社区-数学中国

标题: [转帖]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" m4 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 q4 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 spublic 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  Rclass 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 Himport java.io.*;  
% h" z3 {' n, c7 H6 i/ e/ [, H" Wimport java.net.*;  
$ q+ H& x! k/ N
4 p% U+ i4 I& j8 n7 r. N9 vpublic 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