数学建模社区-数学中国

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

作者: god    时间: 2005-3-31 01:14
标题: [转帖]Java应用技巧
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。  
9 d( C2 m6 V5 d
/ V% R4 e9 _+ _$ V! d$ q9 B---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。  0 L% f" L' F9 w9 H+ V

' y* u  u9 ?& ~3 K- e# x& h% w---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而  
& s/ `* b  p- s+ ]3 V* M. lApplet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。    B6 V% k& ]9 n3 i2 v+ n: L( g

4 v, N  T* G1 V2 k- S---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过  程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。  
. `3 n. [" N8 i% N) ]! K* |  [3 b6 J+ F7 {4 Z# p8 C+ o( ]% `/ K
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init  ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方  法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。  
& f  f0 W; q6 ]( O
7 k+ ?  P9 U, L8 i( s+ Z' m---- 例 程 如 下:  
1 Y, y8 S! {+ j+ Y+ ^+ Q6 p/ ~  X' T  k5 M% x
      import java.applet.*;  
: L" z& G0 ^& B      import java.awt.*;  $ y) Y* C* I) V' `) W" P1 p; Z! i
      import java.awt.event.*;  " z/ Q0 ~3 X5 Z. i0 L; U4 R
   
" _' u' {/ Q# u3 b
' ?9 F4 |0 A/ h+ g2 L! t      public class Example extends Applet implements  
- Q- T/ q2 l7 S                       ActionListener{ //          public static void main(String[] args){  
3 i+ W9 X; k; T* z1 B           Frame win=new Frame("Example");  ( I( j) z# V& V
           Example example=new Example();  
5 r- F/ d" m0 P/ u* ~) P           win.add("enter", example);  
( O7 Z' v& |9 w( {$ f& H           example.init();             //            win.setSize(600,360);  
. z  v+ T9 g+ [8 A) e# ^           win.setVisible(true);  
8 A0 U5 P+ I1 Z; y$ k4 ]0 s         }  
4 v1 T6 H, x) `3 E7 y      public void init(){                        //            Button button;  0 Y+ J! ^6 x3 t9 j
           Label  label;  8 R) u# {* x& m9 s- E" O
           button=new Button(" OK "):  0 t/ D! d+ k2 ~
           button.setBounds(280,200,100,20);  . V! ?; x% X9 Y) N3 }
           button.addActionListener(this);  4 X& z' \: X( X* X% B0 o$ j3 R
           label=new Label();  & w' [4 q8 n* }, }
           label.setBounds(260,100,200,20);  + H! J# l, O) M  o9 c# W2 k
           add(button);  
  D( i4 N8 Q& x7 Z5 Z: O6 l; [           add(label);  - {5 J6 u5 a0 d0 M/ Z
         }  
, A" B2 ^( l: h0 G( I! o       public void actionPerformed(ActionEvent e){  
' H9 M: e& g! Q7 @: @2 l: p2 z; k           Object source=e.getSource();  0 h+ `- G$ N& {1 A' G
           if(source==button){  " x, t/ d' {% y& C" @
             label.setText(" It is a example !");  ; U+ h* X6 f, {. T3 M( p5 l" D6 k* s
           }  . N: F* x! P8 Y
         }  
" n( V# @5 [' ~2 w3 ~      }  
: m3 V; M3 Z3 ?" _' j) R2 |; w/ X+ w; A- g& F6 B! o
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。  / l" e' `5 o0 Y; i# S$ A6 P
9 [2 R8 a+ ^0 F+ k8 ~# i
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作  为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。  
" F' R- K% ?( [# L! [+ ^5 T3 M7 m: i* E, Y% j" u
---- 2. Java 中 的 发 声 提 示  
9 U4 _* W5 E' _+ _( M6 w5 B2 J. p
6 D+ d  n$ [( e5 f5 \, g$ Z" n---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。  
- x7 ]2 A) A2 D( r( z& {" p1 I* P' }$ }8 v& U$ |% `1 Y
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:  
* x5 o/ ~7 p% u7 U! ^5 \" i7 s2 {! j
       AudioClip audio;  9 Q0 Y8 A9 j: c& r
         audio=getAudioClip(getCodeBase(),"Hi.au");  
* c: F5 ~# m6 I4 B( B         audio.play();  - C! _& H# o- i5 a- }  z4 }1 g
2 r& x* U, p7 K2 u  p
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取  得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能  在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能  / w) e9 _. \) f6 }3 |
够 被 调 用 的 。  
; k6 E* q$ u+ ]: O$ h/ _
' S7 E2 z: w* O+ O---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?  
" X6 b: M( a' E8 O7 N% p  E+ {1 L+ ^2 ^
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。  # G5 Q' a8 b* Q1 \6 K+ r

% Q" z( [6 ?, f0 l- g. I% S---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实  现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。  
( t0 a; o0 i% b1 k" X- e
2 m. V4 r; N" W$ g6 X$ q" `---- 程 序 如 下:  1 @# W3 a- h" u* c5 z# ~
+ X8 u3 P, Q4 e8 h, @8 o8 G! P
服 务 器:  
2 r/ t/ j% [6 n2 A2 u/ R0 rimport java.util.*;  
- @/ Z$ ^: z1 y, U3 v  Q+ e% Cimport java.io.*;  
; _3 G# x: w2 r& v* y: ^import java.net.*;  & `5 P( L$ U0 h$ {
import java.awt.*;  / _' Q+ {! ~- j* Y" P
- `, {5 J/ s" h! c- f# r
public class ServerT{  
% T) r) h  A  C. \6 ^* l7 }- h  public static void main(String[] args){  
  i. Y+ ^$ n" j# A- h7 r    Server server;  9 H/ u$ g+ `# e( N0 O; C9 j* Q' G8 ^
    String clientRequest;  
, ?3 Y6 n( k9 n, c" D3 D    boolean quit=false;  4 j5 S) ]% Q( }8 u+ R
    server=new Server(8001);  
6 K* y, H& \6 V$ |, `; j$ g, r    while(!quit){  : D" u$ y5 V2 b3 W( y
      DataInputStream keyboard=new DataInputStream(System.in);  * t+ a" q2 n8 X2 W& b5 X9 `/ C
      try{  
( C% Z: d2 Z) `6 D        clientRequest=server.in.readLine();  9 t) J! W) u' [4 Q8 A# P7 N
        if(clientRequest.trim().equals("CLOSE")){  
) {; @% Y: E: R% |, u          System.out.println("Client says: "+clientRequest);  % w" N% O/ Y# B# b
          System.exit(1);  
/ a" B" K5 m7 H# o: ]' t  O        }  
! z3 s& d) \+ w% U4 a        System.out.println("Client says: "+clientRequest);  
  e; m; q3 O, u& d1 n- u        server.out.println(keyboard.readLine());  3 T3 |# B/ J- y0 ]5 x! g
       }catch(IOException e){  ! u- I) F' U, N# e3 H
        System.out.println("IOException in server.in.readLine()"+e);  # X0 d, G9 Z% m8 v: y% y: F4 B
        System.exit(1);  
2 p% {$ l# Z8 d. \      }  
, ]7 a; I/ t6 V3 }    }  
  A/ f' [6 G# U1 o( G3 O. T  }  # Q: N( M& \. W. K0 Q* g
}  # [- {) Z! J* [: i
class Server{  6 B2 H) Z/ M: C$ M9 K
  private ServerSocket server;  
+ k! _9 ]7 L. B5 H  private Socket socket;  
8 g* {. d/ b* d0 }2 z7 t) R( @+ y  public DataInputStream in;  
$ |' Q5 w+ N5 A  public PrintStream out;  0 u) A& _) x- u
  public Server(int port){  " s/ f8 t2 K* a$ b; h* x5 ~
    try{  
. ?7 O( N" o: e1 `4 E2 x' K/ L      server=new ServerSocket(port);  
' |0 T" t, m, X; `1 @7 F2 G      System.out.println("\n  
& q& r4 O" B( Z, ^. _' \( D# c8 Z*************************************************");  " p5 d9 m0 i0 b2 r) [+ A
      System.out.println("\n @(              Version 1.00 97/12/30 ");  
# S& y7 M3 v$ H1 W  v! l8 Y      System.out.println(" Copyright (c) 1997  
4 ?& N+ ~  a$ {  e              (Lui DongBing) All Rights Reserved.");  % M/ Z2 L$ x& d# |
      System.out.println("\n  
  S3 Q0 i7 c1 l+ L***************************************************");  
) x+ j' L% w( W6 s0 x      System.out.println("\n Server is: \n "+server);  " H% v4 W# C3 p+ }2 m
      socket=server.accept();  # }9 `3 C6 y5 o3 N
      for(int i=0;I < 260;i++){    // 发 声 提 示  
# D6 s7 C/ j. e/ a6 q" b; N        Toolkit.getDefaultToolkit().beep();  
# H. P( C* a3 \2 L$ e5 R& [      }  
: c, f) }+ i* g0 B. W/ g6 D      System.out.println("\n Server is ready ! \n");  
5 ?+ {4 o& ^9 p  D& G      in=new DataInputStream(socket.getInputStream());  0 U( F9 O5 w( `5 o2 q& ~2 I( K
      out=new PrintStream(socket.getOutputStream());  
) n( f- ^' {8 M      out.println("We connect in "+new Date());  
5 p6 u+ [5 A4 P3 w8 p' F" Q    }catch(IOException e){  
) u; }- C( I2 l6 t: g      System.out.println("Server is failied !");  
" a6 U1 o+ M5 M: d: i& S6 C$ D- R    }  
6 F# _  L- ?7 L7 j, |7 Z  }  % x8 v+ W% p7 |4 ?1 f; b2 M: b$ k
}  8 e4 O6 A7 n4 |7 d) ?8 B) s
   
6 E! X8 u0 x+ U8 r2 T  K: e- R# X/ N' A+ m3 }
客 户 机 :  - t. u) i0 j/ b. d0 i  O0 L
import java.util.*;  
* M, V: |! P* Jimport java.io.*;    r% N9 C! J6 w1 v' j
import java.net.*;  
; `  f1 S6 b9 }2 A2 V9 M. ?" V
$ m$ S; I5 d. bpublic class ClientT{  & X# l( g" ~) T9 u! U
  public static void main(String[] args){  ) W1 S- i$ T9 L/ @
    String welcome,response;  % z" a& w" ~* u8 D6 ^! A0 u$ x
    Client client;  
) m7 r( a2 H$ Q* k' K- r6 P    client=new Client("202.120.80.20",8001);       //      DataInputStream keyboard=new DataInputStream(System.in);  6 |+ q" n" d8 `/ Q
    boolean Bye=false;  / @0 G6 F% v# |+ Q: y3 {
    while(!Bye){  
. ^& ?. m& K9 t9 m& Q) r    try{  9 b# y  P# z' |) U8 p% d
      welcome=client.in.readLine();  
8 Y; _+ M& c4 t      System.out.println(" Server says: "+welcome);  9 f6 y( `" Q0 y: F! m; i; F
      client.out.println(keyboard.readLine());  7 Q2 K! R0 a$ O# Z$ A
     }catch(IOException e){  
6 g: e: o2 [! |1 p$ \      System.out.println("\n The talk is CLOSED !");  
' Y+ ?( e& H; U/ n: Z$ f+ n& Z      System.exit(1);  
& x# T" ^7 {" Z1 I    }  
5 ^8 F( x& t  C    }  $ R& F+ z7 _# a2 O4 @
    try{  / _) a% P- O  s6 N; }$ o" L$ C
      Thread.sleep(200);  
- U6 O- C( S/ h: W) V! r    }catch(Exception e){  
- B5 N0 g  C9 Y* F4 I8 E5 t4 A      System.out.println("It is a bug !");  ( e% I/ a5 t0 U% u, H; ]6 Z' \
    }  , V" d% v. s6 R
  }  
$ ?3 O* y1 D/ ~' y}  7 R1 U4 h, X2 s4 ]; X
class Client{  
8 G: f1 t' W8 |  Q3 h. m  public DataInputStream in;  1 K, \8 b4 m" Q( l4 L* S1 x. f
  public PrintStream out;  / F; T& j! |. T+ i. u( M* H4 _
  private Socket client;  8 [3 r" h# {! N  ~7 C4 z( R
  public Client(String host,int port){  4 F: ^* i) b. e4 L
    try{  
) k0 c+ w9 n6 V% r- }* b6 D      client=new Socket(host,port);  
9 I  B5 [$ i& S8 A% o* b/ A5 G7 |      System.out.println("\n  
" m4 W- I, ^0 R# N***************************************************");  
/ x6 S6 C1 _% y      System.out.println("\n @(               Version 1.00 97/12/30 ");  # R* Z, c" m, c; G" B0 r
      System.out.println(" Copyright (c) 1997  
$ D! a0 g# Q! P# L4 ]1 n4 I          (Lui DongBing) All Rights Reserved.");  
. A8 L8 V: M- E; ]( {3 M" ?      System.out.println("\n  
7 W$ a5 A* Y4 Z0 E**************************************************");  
- e( @. Q4 v/ H" {. x      System.out.println("\n Client socket:"+client);  - q; R" \3 u% o' l
      System.out.println("\n Client is ready ! \n");  ! S' ?! Z5 P4 v
      out=new PrintStream(client.getOutputStream());  ; n3 x$ B: S4 J* U
      in=new DataInputStream(client.getInputStream());  ) b! g( p* ]1 x/ Q6 A+ ~
     }catch(IOException e){  
) F4 ^3 }' t* R      System.out.println("\n IOException !\n"+e);  
! v. L0 q: m7 V& p  S/ t      System.exit(1);  ) _  I. Z& I" _/ u( k; J6 f) u9 \  g
    }  
  u8 ^4 r8 |2 J- v8 q: W  }  % j8 R9 O; x  Y" 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
的却不错的啦  谢谢楼主了
0 r, l2 x6 u7 E2 E5 U2 D2 L




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