数学建模社区-数学中国

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

作者: god    时间: 2005-3-31 01:14
标题: [转帖]Java应用技巧
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。  
3 }* Y. ?, k$ B+ K) ]$ g0 ^% Q/ e& l4 J+ `" o4 E
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。  
" p! d. H5 ?' L% a8 k3 }) q& @+ ^& z! m0 Y3 K; G  }0 z+ K
---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而  4 ~3 W1 p4 p9 @5 N* N& [- }
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。  4 ]6 q3 M/ h( [1 z4 a6 N/ I
/ x* V% q' n& W) ]0 N
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过  程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。  2 l2 Z2 ]5 C2 a7 W  Y8 [% `
: A5 E) Z4 W: [# t4 y& z
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init  ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方  法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。  
$ U' F4 W3 ], e' ~
0 p5 [( P6 s& _. P0 G0 O5 S---- 例 程 如 下:  
/ k5 n$ G- `4 D& ?$ s7 c6 |2 S" F% A1 P' @
      import java.applet.*;  
3 }) f' y9 |5 E& y      import java.awt.*;  
% B2 H' @6 G8 w! z      import java.awt.event.*;  
, `, y/ ^) q; F" y! a$ Y( ~% b0 P   
, |8 E. o$ l, \: x" k9 l$ `, w& M8 g8 A' ?' e5 ^5 r
      public class Example extends Applet implements  9 e0 D9 z( X0 y" C) F. H
                       ActionListener{ //          public static void main(String[] args){  1 {' Y3 e; B$ K) A# e, ^) T' O
           Frame win=new Frame("Example");  / G; `, Y% c5 V
           Example example=new Example();  6 J, t9 d; g, j& i) x. ^9 X" z7 w
           win.add("enter", example);  
* F% g& q9 m) U# j& ^! ]3 L           example.init();             //            win.setSize(600,360);  ( S# I7 n: p0 L9 L; O. L2 c; c
           win.setVisible(true);  1 ?  Q4 }1 ?, k, i0 z* W
         }  
* T0 a! z" d9 j9 s( |: [$ [0 ^      public void init(){                        //            Button button;  ; P; e$ {. D3 t) W; N: F% U
           Label  label;  
* c- U' I' H0 b% V           button=new Button(" OK "):  ; b3 i* ~6 k3 ?
           button.setBounds(280,200,100,20);  ' W$ W! h$ P+ G0 e! ~( x
           button.addActionListener(this);  
8 }7 w& @0 w; \( B! c           label=new Label();  
% @- z/ u" X3 Y4 W8 e           label.setBounds(260,100,200,20);  7 b6 ^! T; D# {3 ~+ H% p  l
           add(button);  
) B- h1 Q& Z# p5 K3 b6 X7 S           add(label);  % y- b/ j: {, K! h1 ^7 ]5 t
         }  
  t0 {0 y! f; t       public void actionPerformed(ActionEvent e){  
+ c, \0 Q* f0 \- M4 k, S           Object source=e.getSource();  
7 l# _; L' e; b4 }6 E           if(source==button){  
+ q4 T3 b6 v) ]5 n" J9 U+ ?             label.setText(" It is a example !");  0 t9 f$ p, U2 E3 w( @  l3 {
           }  7 A: F% Z+ d2 W# K% O4 n
         }  
  `1 g& M, N5 y" x' F. I      }  
* {3 v3 O( P9 R( i: {* U: {/ z1 r& m! b% {; Q$ y
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。  
; P& S; l2 g0 B8 {9 y5 K. H' \1 v3 I, V7 i3 \6 |/ b7 Y. t# d
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作  为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。  
, C% Z. _& K! Q
: S- S4 U! M7 f' p---- 2. Java 中 的 发 声 提 示  % B6 a0 l+ K7 ~& d% W- h0 B

) K. `) \) k) J4 {8 U8 t+ y---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。  + w+ L* A( b- R

, t, D6 D" {( b1 f: E1 @---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:  
) _! H: o/ p" w# T  \
4 g) s2 N3 C, m! W. ?       AudioClip audio;  & o5 t( y  K6 I/ Z' I
         audio=getAudioClip(getCodeBase(),"Hi.au");  
: A9 ]5 Y: S6 Z( ^) t         audio.play();  , |4 \0 H2 m2 Y& v# W* O

% v3 z* ~& e& `; Q2 ]---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取  得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能  在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能  
& A5 R+ ~6 I  S$ e1 m够 被 调 用 的 。  3 y& V" [: Q% U  B5 \# @

- d. k- D9 P8 F! O" M---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?  / e# I- m7 c' B7 j' C" n
1 s4 H5 |) o- I( [
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。  
2 F5 c  v1 C% g6 ]# A# P
+ b! I  E4 s" |1 B0 U  L---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实  现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。  3 ^* m: R0 D3 _6 M# g2 {$ q  J9 I/ p6 a
% L  ~2 M* B  G8 j" d
---- 程 序 如 下:  5 n' m( l& X; {7 ~$ @) Y
! s4 j" v4 k- [6 T+ ~( g
服 务 器:  / P) d9 w  L- P3 b+ J
import java.util.*;  % \: i& C6 \0 i. U5 L3 _
import java.io.*;  + X- R3 O2 D2 G- F) U# |( D
import java.net.*;  9 d% Y: Y8 b' `8 d& V2 A9 m
import java.awt.*;  
% Q& [2 k0 n; x" d* p- ?0 V" Y- Y, o
public class ServerT{  
. U" D; s! v9 a  public static void main(String[] args){  
! ~! ]  O% i0 Y7 \  a    Server server;  2 h2 T; z9 z, m3 @& ]: W
    String clientRequest;  
! C: d& s) r1 Z6 _( N: s    boolean quit=false;  
" u3 V5 ?+ N+ u) m0 S    server=new Server(8001);  
0 O5 _+ B0 ]# t! ?0 K1 M    while(!quit){  
/ ^# [# R) m% @  v3 V: @6 y      DataInputStream keyboard=new DataInputStream(System.in);  7 M5 ~: j9 S$ g6 r' ?+ ^* m4 E
      try{  
' T9 N" C! ?) H5 f: n$ o        clientRequest=server.in.readLine();  & j8 b: j4 E# ~! v/ j% d. G
        if(clientRequest.trim().equals("CLOSE")){  
6 U  ~2 z! |: \          System.out.println("Client says: "+clientRequest);  
6 f: u. I# ]3 h* Y          System.exit(1);  
, ~" J8 p+ e3 R+ \1 w        }  
( |2 m0 i1 v* Z, [' r4 y8 R- g  s        System.out.println("Client says: "+clientRequest);  0 N2 Q) _, n$ d8 E( C0 N
        server.out.println(keyboard.readLine());  ! r& C( D1 C. V9 \7 z. L9 l$ c
       }catch(IOException e){  
$ t" d2 w" W: Z# k2 I        System.out.println("IOException in server.in.readLine()"+e);  
  ^! u% k: z6 ^9 c& |( C: ~+ m6 ^        System.exit(1);  
# o: B+ A  X9 Z      }  
% |2 N9 N8 U: K6 |! W    }  
# L/ y$ G5 x$ _/ R8 ?  }  % N/ R3 Q3 b, B
}  0 S" ~3 C7 Z) R5 ^8 w( x( Y" ^
class Server{  
( C$ U4 U* i- D$ W  private ServerSocket server;  
9 g8 O# @: J" a2 ~& Y( g& T  private Socket socket;  : u' H  I/ `( r! s3 ]3 D
  public DataInputStream in;  
0 B, V4 H1 c5 W% I% Y  public PrintStream out;  0 j/ t4 Y' j. T1 K/ _/ Y) h
  public Server(int port){  
/ x  O; K) r: x: v7 A0 [- @/ i    try{  & N3 O, I2 y; H7 s1 F' ^- y$ g
      server=new ServerSocket(port);  & u9 K/ O! Z4 x2 ]
      System.out.println("\n  . N  p7 @1 W: j; E# w9 P6 x. b
*************************************************");  
$ b. y* G4 E( @      System.out.println("\n @(              Version 1.00 97/12/30 ");  . g7 G- l' |. [4 O2 a+ U9 D9 d
      System.out.println(" Copyright (c) 1997  7 C! u# F/ L' q4 H1 g8 k1 u
              (Lui DongBing) All Rights Reserved.");  6 d& i& f6 N# }
      System.out.println("\n  7 k# z: ~: B1 i1 x1 N4 t; ]
***************************************************");  
+ L- i$ f% a* z* D# Z/ N$ R      System.out.println("\n Server is: \n "+server);  
' M* C' W! I8 o' d2 F      socket=server.accept();  
1 c  q1 [! j. m& B# Y  W+ _7 e9 T      for(int i=0;I < 260;i++){    // 发 声 提 示  
( F- H$ ~' L" @; M2 V! b        Toolkit.getDefaultToolkit().beep();  % D) w" f4 N- E7 N, p: J+ h) y, ^
      }  , r% _1 M! w( l8 M
      System.out.println("\n Server is ready ! \n");  
) z- K; V- n& l) O7 f5 H6 K; Y# s      in=new DataInputStream(socket.getInputStream());  " W. x; R' h( o* A
      out=new PrintStream(socket.getOutputStream());  
+ o( D+ r6 S+ z      out.println("We connect in "+new Date());    \( e% z* }/ `$ W5 h" i  C
    }catch(IOException e){  + _& ^+ U8 ^7 C" @3 i/ s+ r
      System.out.println("Server is failied !");  
4 N$ m& U+ X! d7 t; T    }  4 k+ ]; w1 X( L% u
  }  ) h0 j( I) u4 Q0 r7 Z# p! o* T
}  
/ O0 n* W% V' l( h( u1 v   / W3 I- J/ g; k4 g" D* m
/ U, F, _0 B9 j
客 户 机 :  1 d9 n& z+ _' ]% ^, a
import java.util.*;  
; l9 h8 J* F) Fimport java.io.*;  + P3 p7 w9 C6 N# b- n
import java.net.*;  
" E# n) B4 W! H( E0 I1 ^4 i: t8 [) c7 t* c
public class ClientT{  
1 w$ U# \, l. ~  public static void main(String[] args){  ; r0 w+ v5 `( [) i. G9 k
    String welcome,response;  
4 G1 f4 g( {5 g2 j" ?    Client client;  
, L4 Z$ s, Q2 K# v- W1 W    client=new Client("202.120.80.20",8001);       //      DataInputStream keyboard=new DataInputStream(System.in);  ! s; b4 W9 D% z) o! W' u1 o
    boolean Bye=false;  9 j' P% l: p+ W* x& s" v' x
    while(!Bye){  4 g8 |0 I8 K6 [4 \6 ?0 {. A
    try{  
4 L/ R7 o) _8 e, `      welcome=client.in.readLine();  ) y1 P+ J4 R6 A4 t; c9 S/ n7 k
      System.out.println(" Server says: "+welcome);  
. J4 U5 s( z  _$ L: i, W      client.out.println(keyboard.readLine());  # r. d, |/ D, W8 i+ L- n
     }catch(IOException e){  . X, E. v; s* j  C6 C5 R
      System.out.println("\n The talk is CLOSED !");  + X: E2 K  Q5 S1 Y3 ^* J
      System.exit(1);  
' ^  g0 X+ b& x9 ^    }  
  e% `$ {) K7 y7 D+ N    }  
/ O* O$ ~* _4 V1 Y7 C    try{  " d6 I3 x/ C# o8 l3 z2 l* `
      Thread.sleep(200);  
2 S% g: `& a5 K4 S9 j; S/ V: X    }catch(Exception e){  
% {5 A% s$ u. H& {, X$ x" r; H      System.out.println("It is a bug !");  ! X2 w& z- H' g: n* g* i
    }  
4 e+ ?) k/ O* w- N' t  }  
# J% f3 J. I: G( L, a! V' H}  ( Z2 M4 U& p( V* g
class Client{  
" W7 K- l4 S( l; r* N% U& ?  public DataInputStream in;  $ S! D2 {$ b4 e* i# G4 P" O; d
  public PrintStream out;  $ M' I& ~8 ?' W0 D) ~1 v5 G# @
  private Socket client;  8 i) ?0 N0 H" e1 V9 d1 v" \
  public Client(String host,int port){  
4 w7 F6 k2 [) y3 Z0 q( R" B- L1 s    try{  
$ e+ B! M9 v% F' O. }      client=new Socket(host,port);  
$ ]0 H' O$ {! [9 a: Y      System.out.println("\n  
: Y" I" @" r) y- x3 T. R***************************************************");  ( B7 \" F# }+ A" q4 S2 A; E! x/ l
      System.out.println("\n @(               Version 1.00 97/12/30 ");  " j' v0 w( ~$ ]0 z* w
      System.out.println(" Copyright (c) 1997  2 t2 d9 l4 o( t3 t% C$ |5 I
          (Lui DongBing) All Rights Reserved.");  
( X1 l% _: a3 m: O$ A% \* g      System.out.println("\n  ) j, m& G7 @8 y9 ~
**************************************************");  & o: {8 _% U, O
      System.out.println("\n Client socket:"+client);  7 t" G. U! j* \! y6 J
      System.out.println("\n Client is ready ! \n");  ! Y, m; _2 b  Q" g  T
      out=new PrintStream(client.getOutputStream());  
) o1 m/ M" I9 o% [      in=new DataInputStream(client.getInputStream());  ) b7 z; N/ A% N' u
     }catch(IOException e){  4 t6 l) x5 T; |+ L4 h$ [
      System.out.println("\n IOException !\n"+e);  
# v1 {" @/ ~# D# E. q$ N      System.exit(1);  ' R) N: a/ b/ m
    }  , r. B2 D/ C2 t7 {
  }  0 K& @$ k3 p1 j% c" O* _' D
}
作者: wangyu249    时间: 2006-11-21 15:07
xie le
作者: zq1987884    时间: 2006-12-12 13:15
<p>不错</p><p></p>
作者: wssl103050    时间: 2012-8-23 12:30
的却不错的啦  谢谢楼主了
7 F, F/ u1 P# O' k; y




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