数学建模社区-数学中国

标题: [转帖]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, uApplet 一 般 来 说 规 模 较 小 , 而 对 于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( U9 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 Timport java.awt.*;    e6 b# w8 u4 C2 q+ S# M2 O) \

! E, X, y" D  t  d5 d! Qpublic 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. o6 [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