QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4436|回复: 3
打印 上一主题 下一主题

[转帖]Java应用技巧

[复制链接]
字体大小: 正常 放大
god        

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-3-31 01:14 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。  5 z4 H+ i/ q& e
# P; H9 Y# D$ F6 p* e- ]
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。  $ ]3 Q, |6 ]4 M6 _( k

! f& g/ D4 ^- b' t# E$ A---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而  
# ?" T$ i" N9 K% u) e  qApplet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。  ! P4 ^5 P: x! r/ n1 z4 h
/ N* M/ Z9 o/ p6 Z
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过  程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。  ' u- x( T, Q4 O- T. o

2 {* ~$ q6 t9 h' J  D---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init  ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方  法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。  
# |% P: z! c* ~! Y! m
$ J, A7 v+ P& w6 {---- 例 程 如 下:  2 o6 b2 U4 V- Z! ^
9 h5 y5 G$ u$ K0 D
      import java.applet.*;  * w9 M: E( K, e% P
      import java.awt.*;  
$ V+ j  a% z7 @2 m      import java.awt.event.*;  ( Z8 i- E6 |9 [) D9 ]) p" F
   
" j8 ~, @) q$ o: W; F0 D' s7 r; }$ V) k9 L
      public class Example extends Applet implements  
/ d& K- q# [) M2 X( X  e, z! ?( h                       ActionListener{ //          public static void main(String[] args){  
! ^' ~0 u6 Q3 \& r9 d7 X$ M           Frame win=new Frame("Example");  2 c/ Y3 v$ M4 O! Y( P: W  C" n( N
           Example example=new Example();  
! O7 C6 G; z* v; C8 |5 Y           win.add("enter", example);  
% E) B& a2 Y4 ]) j5 U8 o& n           example.init();             //            win.setSize(600,360);  ( ?, \* y. s; P, T% S
           win.setVisible(true);  7 r7 @' r! d& l# Z! C! P3 K2 A
         }    Z0 O( h; r& m
      public void init(){                        //            Button button;  $ e" n. Q3 `! Z0 M0 U* C
           Label  label;  3 H5 E) U+ ?9 N/ y% u
           button=new Button(" OK "):  ) \" R7 ~" {" e0 m5 t7 ?
           button.setBounds(280,200,100,20);  " [7 v# w) S1 \4 e
           button.addActionListener(this);  * @( d% k% ^6 T7 l. q
           label=new Label();  
' S7 e) B# q, E0 n! {5 @! x7 G           label.setBounds(260,100,200,20);  
8 d& n! N) x. X1 V+ U           add(button);  
; w8 I7 q, S8 S& S! v& L- C           add(label);  % D5 @% e! V% j
         }  ; y# W- }: E* {
       public void actionPerformed(ActionEvent e){  : F& W* z3 h, `4 N+ Z* p5 O( m
           Object source=e.getSource();  ) {# M& U( T3 k
           if(source==button){  " \3 V1 X9 U* C: `# `
             label.setText(" It is a example !");  
, f+ S2 ?% R  X           }  
; }# Y- h, m; @% Y( E8 U3 @0 N( W9 m         }  5 T; s/ L- t% a, g  ]7 H, o
      }  ( R! q" S& E. z: T

- U1 z4 g% U% m, K, x---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。  ! l6 E4 D2 ]) ~- ?5 M2 M7 C0 N; T; p/ o; e

4 }; l: R, L$ D. E---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作  为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。  " ]+ r, {5 r2 ~2 }3 \
9 D6 W: w" ^/ e, D) `; n  ?
---- 2. Java 中 的 发 声 提 示  
* P5 U$ J/ F) D7 [
; m# h0 R5 P- l: u---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。  * s( q9 E! h3 P' O  x8 x) F% {- [; {8 |
5 l$ l" B- c8 @* F! ~
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:  * ]% S* Y# K  s/ s% U! t

8 K, q" f/ j7 I       AudioClip audio;  6 X9 Q" g3 R& ^8 G& y
         audio=getAudioClip(getCodeBase(),"Hi.au");  
2 J1 {( k5 `: A0 }( m/ f         audio.play();  3 S' k/ S6 \) x, f; i

9 J7 q, ]! S7 X. s# m---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取  得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能  在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能  
) ^! r/ {9 a) D3 T够 被 调 用 的 。  
5 e% [  }; |5 F5 [
5 l* M! S( z, B4 z( h: g  A---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?  ( y6 o) s9 A* T: \0 P$ n

$ ?, w# Z4 f6 G( B3 d4 F. l---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。  ; N3 M6 D3 d! a, S

  U: r% {8 @# z- I+ |---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实  现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。  
) Q$ `7 k( S9 H) u- C+ X6 `8 T/ g+ `0 ]7 ^+ B3 y4 C
---- 程 序 如 下:  
2 x9 V( f( X1 K! v  d: f
' {! \; e" k) K# `) T& K 服 务 器:  4 m" n4 k1 s9 \5 A8 _: N
import java.util.*;  & R1 b" w6 Y; l! E  e" X4 w
import java.io.*;  
+ g1 J" N, k. R% S2 ~$ w3 q, _4 Mimport java.net.*;  8 o" R& E$ ^& p( _0 ]' r7 `4 L5 s
import java.awt.*;  
' o) d/ m. a# ^
& S, Q2 J  L6 E/ bpublic class ServerT{  
7 O9 g3 A" `# K1 e3 H  public static void main(String[] args){  4 L4 Q( _0 ]# `# `7 w
    Server server;  
9 f" [1 E8 _/ X    String clientRequest;  
. D% v2 |& h. E4 K  w! {! |# G( E$ G( n    boolean quit=false;  ! V/ |' K+ H, m( u- F1 @+ _0 y
    server=new Server(8001);  
3 _3 g1 Y0 X/ d    while(!quit){  ( }9 _0 K" e7 Q* s
      DataInputStream keyboard=new DataInputStream(System.in);  
% ^" {# ~0 ?' ?/ S! y      try{  + q( x$ w* z) q" z! N& ]* G
        clientRequest=server.in.readLine();  6 K4 |: M, m2 x  N
        if(clientRequest.trim().equals("CLOSE")){  
+ G, g, C/ S6 U          System.out.println("Client says: "+clientRequest);  , J2 c" g# _" M* E1 y& C
          System.exit(1);  
1 w: C& d- p2 g' D/ b4 a        }  ' T6 H1 \/ B* K% q2 S
        System.out.println("Client says: "+clientRequest);  
8 J# s: Z( p( E" F6 Z$ }9 O+ }        server.out.println(keyboard.readLine());  ' b* Q* O( L4 ?! O
       }catch(IOException e){  # C" O$ O% \/ [. n! U5 z. g$ B$ h
        System.out.println("IOException in server.in.readLine()"+e);  
* r* h0 X& u& Q        System.exit(1);  1 r1 K$ P! {& U7 ^; l. j/ n
      }  
; R' ?$ a, S, v$ H    }  7 a  d. T( h5 u% e( C3 X2 i) x
  }  . P3 {) U  A0 G& R
}  
6 \$ Q0 X+ N1 M" ^! Cclass Server{  
2 i' X* i6 j. O/ j  private ServerSocket server;  
9 I# {" v7 s' B# n9 l( [, l1 b  private Socket socket;  
, J; w; d7 l% Y* d  public DataInputStream in;  
- l: e1 q8 g+ V! t* J( x) h  public PrintStream out;  ' }6 A5 H4 W8 t9 v
  public Server(int port){  ) @, [8 `% ~4 O. S" f- _6 L( g
    try{  1 k* \2 `  }) B' T
      server=new ServerSocket(port);  6 H( a) Z# l; V( h, A1 E
      System.out.println("\n  $ J  N9 J% V3 z' N% i
*************************************************");  8 X( o# j! c) v6 t) V
      System.out.println("\n @(              Version 1.00 97/12/30 ");  
: N  y7 ^0 i4 `9 X      System.out.println(" Copyright (c) 1997  6 T+ u% Z2 Y7 f4 o# W# u9 Z
              (Lui DongBing) All Rights Reserved.");  # C3 T) P2 ?9 Q
      System.out.println("\n  9 r" B- @  y% U, _
***************************************************");  * |" S* H8 P) F7 b* p% Y& {
      System.out.println("\n Server is: \n "+server);  
9 T; v' ?; p* ^: u, C& }) h      socket=server.accept();  9 `. u2 r% Z  Z$ X/ Z+ o1 S  P
      for(int i=0;I < 260;i++){    // 发 声 提 示  
# y5 M  O- N9 N, o2 v7 w        Toolkit.getDefaultToolkit().beep();  
$ s! u) e8 N( h# Z3 F4 T! l0 a- y      }  
4 r5 H7 f2 A$ y1 l0 Z) _7 |' J      System.out.println("\n Server is ready ! \n");    o, `/ ~3 E5 D2 N! C. g, e; X3 ?
      in=new DataInputStream(socket.getInputStream());  
. D# F% ~: V. @# M      out=new PrintStream(socket.getOutputStream());  
& {0 j4 ?2 T) g      out.println("We connect in "+new Date());  5 ]) y* K( R; a7 D$ S; Q
    }catch(IOException e){  
# j3 r' h( k8 j6 z      System.out.println("Server is failied !");  
  Z. D% J4 M& M# n    }  
' F4 Q. O( k! ]! E  }  2 ?$ P$ o% |2 S" R6 ]7 H/ `& g4 x' {
}  9 `% _& |, @7 S% L- @( C
   ! ?/ k) N1 e2 s9 P. B

+ u4 H! I  n8 q6 \6 b# `+ p 客 户 机 :  $ T5 p/ F, A$ d: c9 u
import java.util.*;  
5 L0 D( u  ]# G7 D2 P1 H6 l/ cimport java.io.*;  
5 d  p0 k/ l. a+ `$ Q# E  Yimport java.net.*;  ; I, c2 A7 i+ D% J. N3 z# @
3 W2 G' J  p: H7 e
public class ClientT{  9 \( b7 i: f3 ^
  public static void main(String[] args){  
7 c8 j* h, ~/ r2 W+ D! j3 O    String welcome,response;  
2 g3 w  W! k5 u. {    Client client;  ; n. g: r* v# B
    client=new Client("202.120.80.20",8001);       //      DataInputStream keyboard=new DataInputStream(System.in);  
, ^! P# q' g3 @$ N1 q    boolean Bye=false;  
, P9 E! g' I7 ^6 g: I    while(!Bye){  & Y2 v$ M+ e% O2 f& c1 M& h$ @. \
    try{  
4 H8 q& j9 }9 M3 ^      welcome=client.in.readLine();  & I6 p3 s* N) q/ N/ q9 f! s
      System.out.println(" Server says: "+welcome);  + ~4 x6 [* e- X; S. x. o$ ~( S
      client.out.println(keyboard.readLine());  
0 L" [: t1 P( L4 U+ k. x% g, n/ I     }catch(IOException e){  1 I0 x2 q% d& b8 |
      System.out.println("\n The talk is CLOSED !");  
8 {' w/ ]3 k% C$ n. d      System.exit(1);  
' K1 ~8 t6 A" I; g    }  3 ~+ A5 D8 c" S& T( A
    }  * y8 h9 D# P( X. D+ P0 U) A" k
    try{  
' k! V; j9 ^! \% G! P% P9 ]      Thread.sleep(200);  % p/ ~* f. p* G- K+ h2 w" F" W! T
    }catch(Exception e){  
% b6 o* R# E$ I8 h      System.out.println("It is a bug !");  0 d7 [1 e9 G1 v! W: d. H
    }  - ?" p8 m- F1 V# n, e; s0 z
  }  , I# ?2 _" @. c6 e
}  3 H+ x, T8 h7 ~- r( z6 V( T
class Client{  
+ j0 d* F* V+ v4 U  ]  public DataInputStream in;  * V9 E, k3 e5 g3 x- Y
  public PrintStream out;  ; e& F0 Y  U/ F& C" u
  private Socket client;  9 t; B1 h: E  s  e  d# m
  public Client(String host,int port){  8 G% R$ k& m+ \; X' O) u8 S# o
    try{  
/ y" G$ d* p4 m+ h) T& K      client=new Socket(host,port);  
& X4 ?. ^5 E! j; ?      System.out.println("\n  
" t+ k; o/ c. \& E***************************************************");  
: r2 A: [3 T! R. ~5 b      System.out.println("\n @(               Version 1.00 97/12/30 ");  
; `; z+ P! }& o      System.out.println(" Copyright (c) 1997  / S! D* Q, {0 m6 t/ {4 W
          (Lui DongBing) All Rights Reserved.");  
8 O& J# l% \9 C2 {8 S5 i0 g      System.out.println("\n  4 |3 O) D! M0 Y; }( n" d- Z4 r
**************************************************");  $ L, T1 R; i" f- Y0 k
      System.out.println("\n Client socket:"+client);  7 \' {' h! @0 U- E& C9 L3 u
      System.out.println("\n Client is ready ! \n");  
/ U2 X. [8 Y# C+ E) n3 R      out=new PrintStream(client.getOutputStream());  & L2 t& n5 Q* N. F
      in=new DataInputStream(client.getInputStream());  1 f! u5 o$ ]  B& Z% ~# t  `+ r
     }catch(IOException e){  
0 M$ N7 E# C5 e; r- L3 M) d      System.out.println("\n IOException !\n"+e);  
8 h0 h  ~+ F0 E) U/ H9 L  h      System.exit(1);  
, t; q  m) r/ Y/ h+ ~* u    }  
) J( b3 Z8 v% f- ^! N. m, x, m  }  
! W7 U5 H/ Z3 \" d' n/ C/ y}
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
如果我没给你翅膀,你要学会用理想去飞翔!!!
wangyu249        

1

主题

3

听众

54

积分

升级  51.58%

该用户从未签到

新人进步奖

回复

使用道具 举报

zq1987884        

0

主题

3

听众

19

积分

升级  14.74%

该用户从未签到

新人进步奖

回复

使用道具 举报

33

主题

10

听众

1691

积分

升级  69.1%

  • TA的每日心情
    开心
    2014-7-8 08:29
  • 签到天数: 201 天

    [LV.7]常住居民III

    发帖功臣 新人进步奖

    群组PLC和单片机

    群组2012第三期美赛培训

    群组MCM优秀论文解析专题

    群组沈阳理工应用技术学院

    群组学术交流B

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-12 04:06 , Processed in 0.492746 second(s), 69 queries .

    回顶部