QQ登录

只需要一步,快速开始

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

[转帖]Java应用技巧

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-3-31 01:14 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。  
$ K8 G# Y$ r7 x4 e0 w+ H/ |, \# V
% {7 ^  `5 Z+ X7 W. M% t  F---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。  
# }/ X) @6 `; Z; J- F8 a6 X" Q
---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而  0 u7 r, z0 O; j% m* E
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。  
& d4 Q# p4 U$ s* n& K" S1 `; `% H
3 a+ y! h! |! C---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过  程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。  
" V, G# z  T! e8 M' R6 m7 t0 r) U1 K, E5 t4 i) ?
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init  ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方  法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。  ! l: V$ p( e5 X) X  M! N( Y2 C

1 Z8 y2 i& c/ ~# ^0 H---- 例 程 如 下:  
0 _5 h$ R2 S8 Q, k5 G3 o7 d. k) j) y+ J
      import java.applet.*;  : E( a0 B1 I1 B) e( f3 d+ [( H
      import java.awt.*;  # n" i" J& Z/ }8 e% n
      import java.awt.event.*;  3 O& k3 o; G2 v' k
   . x7 h  {& l+ z! h
% i1 b5 Q& ?, u" _6 U
      public class Example extends Applet implements  
* ^+ O# b. t& j8 }                       ActionListener{ //          public static void main(String[] args){  % I9 @7 e( a8 k8 s. Q5 I% X  J1 C
           Frame win=new Frame("Example");  9 D6 v0 t" A% {) C
           Example example=new Example();  
4 |: ^% s1 B$ Y- l           win.add("enter", example);  $ Z1 c( w" q6 x4 ~3 l+ m
           example.init();             //            win.setSize(600,360);  
; i4 s! N! m& f           win.setVisible(true);  + q; Z5 F. m5 H# F% o9 b
         }  ( {0 @) S% x- L8 w2 {( V
      public void init(){                        //            Button button;  
& G0 X4 R& N- H# n/ v7 F8 y           Label  label;  * ^7 T' q4 N! ^; ?6 O* v6 @( N
           button=new Button(" OK "):  " C" h% ?, Y$ W4 o4 b0 T- Y& k
           button.setBounds(280,200,100,20);  ! P/ u" Q2 `+ r- k' @" P1 _
           button.addActionListener(this);  0 P9 Z: A- o4 p' e0 b9 @
           label=new Label();  / X6 x& e/ _! ]& g. x
           label.setBounds(260,100,200,20);  
1 h$ G' ~1 J! E0 C4 R. ]7 ?           add(button);  
! J4 D" D$ U2 X! [9 A4 |; J2 n           add(label);  
1 L5 N/ j# |: M( l! f' r  \. [! j( B         }  " N6 a3 t; _$ `2 q
       public void actionPerformed(ActionEvent e){  1 j0 p* [+ r! C+ a$ p
           Object source=e.getSource();  
0 `4 ^/ U" b! k. u; }) s. C           if(source==button){  9 Y/ c2 ?8 j2 S, Y/ ]( l4 e, Z
             label.setText(" It is a example !");  . z1 D; p: O: C5 H! r5 h- i
           }  ' q4 O9 z- S5 j' ~0 z
         }  3 \! h' \) x6 {1 U
      }  ) C* @9 Y. |  ^6 a5 z$ r9 J" r  r4 v

  z, k1 S- a& G# u/ P---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。  7 |  j  M+ K' f0 \! \- g

/ {  z$ V& M) `+ O! G7 q* U7 G8 P---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作  为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。  
4 v3 K% y- L) H1 c: Z
/ E3 c/ x3 K, p" x' P. Z---- 2. Java 中 的 发 声 提 示  
$ n) {" c! E( ]& d) D
+ @, j+ d0 L! F, G1 t& Z---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。  
! |( j) X, W. F) Y! v
1 p/ i  [: A1 ~3 U" E1 @---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:  
, o! O8 s$ h$ K, I! K5 [3 }0 I2 D4 W+ V$ R, J7 y! g3 f* b# r
       AudioClip audio;  2 g! W( g" N2 I, Y
         audio=getAudioClip(getCodeBase(),"Hi.au");  $ ]3 j( [: p- O9 V
         audio.play();  
# N! l. k+ {' {8 p2 l9 F! y, S5 `9 k) e9 u8 C8 |
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取  得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能  在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能  
# S: L- ~0 O# l' a, X9 b* U: K. N够 被 调 用 的 。  6 H7 R7 t. ~5 y; K
$ R( c5 k4 t) f1 z9 u. ]
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?  + F: g) G$ l" [5 y) l# W1 e
. Z, M* V8 u6 k
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。  0 J+ h7 E) [1 V& Z9 H/ x6 k

( |) t* t7 \" `2 A---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实  现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。  
) o8 C( g, }- M8 J: ^5 Q$ q# U1 @4 E- Y4 V. Y5 l, A' F) }( p
---- 程 序 如 下:  1 N( G" z' h+ O/ \, V
! Z8 A) C; k6 Z5 _& @+ |) v! m8 V
服 务 器:  
7 `6 r$ q$ W: Uimport java.util.*;  ! R% i# h2 r3 D7 f/ H9 ?+ C' n
import java.io.*;  8 Z$ a7 e9 @( A% m: f4 R* r
import java.net.*;  . _- ~4 `9 X9 c1 r: A/ Z) E9 |0 a) _
import java.awt.*;  
9 Q/ G5 }5 c  m# [
' ^: y6 _% d+ c. @public class ServerT{  
* u  g7 ~1 n7 a  `$ ~; g- `  public static void main(String[] args){    I' M' ?! x  o$ }1 h( \* {) m
    Server server;  $ m$ D# f. M$ m+ ^; B, X( y0 f, p
    String clientRequest;  
  X4 u& Z7 B/ R6 R+ o$ e) ^    boolean quit=false;  # H0 w7 M* H: S0 }5 x
    server=new Server(8001);  9 K# L) `2 |( @9 M4 n
    while(!quit){  % _+ P# S  |0 y$ J7 S% o) n
      DataInputStream keyboard=new DataInputStream(System.in);  / w( V8 V/ j" U" T) V8 W! l$ Z2 U
      try{    j0 Z* U  W' e  `+ ~
        clientRequest=server.in.readLine();  2 s( M( P8 Y) Q8 m, G2 p1 A! ^( E
        if(clientRequest.trim().equals("CLOSE")){  6 K8 a* X& O; k0 Y# _3 g9 [
          System.out.println("Client says: "+clientRequest);  : y, L9 G$ D; [: }: i2 z$ u
          System.exit(1);  . z: w3 [5 k* ]/ e. N5 o1 g& m! Z
        }  
7 Q( ?! o- J! ?6 l* I        System.out.println("Client says: "+clientRequest);  9 }% Q5 R% O0 x3 ^' r& S% C5 p
        server.out.println(keyboard.readLine());  
! ^7 e0 }# s4 x4 C6 }& \       }catch(IOException e){  , Z! |; p- s: h7 e( z9 L+ x
        System.out.println("IOException in server.in.readLine()"+e);    L2 q1 {+ N: E+ f- i
        System.exit(1);  
* h+ v: B0 s7 B0 I/ h- ~      }  9 D2 P: E* y! }# c/ a. }4 y
    }  8 }, J! E9 P/ m! Z( M
  }  
7 ?+ T. c4 f# J; q0 _6 \}  
/ }- }* D  g( }; c# Uclass Server{  ! B! w2 m7 G' }, y7 l+ r
  private ServerSocket server;  
- E5 I/ E: o% h! H  private Socket socket;  
7 G" |) s' }) ], F( O5 n+ B  public DataInputStream in;  . d) ~2 {$ X; B6 @3 o! ?( P, J
  public PrintStream out;  + _" ^3 [- [# H1 N
  public Server(int port){  
% N. m7 N7 U" X2 B/ P    try{  
4 E, `0 G2 y( \5 k      server=new ServerSocket(port);  
! l% p" M3 p. v. f/ \; ~" A& u      System.out.println("\n  6 q! L0 @, w) i9 [- B$ P9 H
*************************************************");  5 H" c2 ]# n! [. e
      System.out.println("\n @(              Version 1.00 97/12/30 ");  
/ h  g: W  h2 L% E. d: a4 O      System.out.println(" Copyright (c) 1997  
5 K+ z0 H, X; Y+ O8 J              (Lui DongBing) All Rights Reserved.");  
, b7 x& D3 K- Y      System.out.println("\n  ) w9 N" i* ~  R" |: T7 C
***************************************************");  
+ Z- e9 H- _6 u& c( R$ T. g) L' h      System.out.println("\n Server is: \n "+server);  
4 i, r( K9 ]6 r, P7 a6 s+ o      socket=server.accept();  , M" H7 p! M& R- X9 h5 c9 o8 \0 X2 N
      for(int i=0;I < 260;i++){    // 发 声 提 示  
* L0 z; w. e0 I        Toolkit.getDefaultToolkit().beep();  / ^: ^( q! U1 J8 a1 y
      }  
8 L- @5 a1 W- E      System.out.println("\n Server is ready ! \n");  
& O& l/ p* V' ]) Q  x      in=new DataInputStream(socket.getInputStream());  
) Y: i3 K  ], P9 n) X  o      out=new PrintStream(socket.getOutputStream());  3 Y9 q) a3 V8 J( ^0 v, u# S
      out.println("We connect in "+new Date());  & l2 p4 [4 v' P$ s: F, ~
    }catch(IOException e){  ) Q9 z' B* }$ @- j$ @8 `" h' ]
      System.out.println("Server is failied !");  + M  g1 Y1 l& J* V4 e
    }  # n% v/ V8 C# ~- @0 @, z- c
  }  % w7 N* g+ ?. i# j
}  1 P% u+ I. C+ |6 @- u, h
   
  ?8 T; u4 h% K
, |& A! d! s8 N 客 户 机 :  
; F& K( X2 x4 h  R; ~: himport java.util.*;  + b# h4 ]6 P. u) M! w+ F
import java.io.*;  
3 S5 J3 ?2 I. Q* R$ N6 yimport java.net.*;  
; E+ X  C: W$ ^6 o. i
. V! I# v) m2 e3 ^  qpublic class ClientT{  # v$ ~1 w9 P; h. x: ^
  public static void main(String[] args){  
( j( C7 _# ^: l3 e  B- M    String welcome,response;  % @- K% s$ |6 y' }0 G
    Client client;  
/ }# r% ]- H: {1 E    client=new Client("202.120.80.20",8001);       //      DataInputStream keyboard=new DataInputStream(System.in);  
' `2 n/ z  B2 ]* f' U+ O$ H    boolean Bye=false;  
/ k+ g% N2 Y. R    while(!Bye){  & [1 i7 P0 w2 j6 Y4 ?( t; h
    try{  : u8 d* x/ ?$ ^5 o1 n1 b+ Q
      welcome=client.in.readLine();  
# W% G8 ^# A' j& b6 e: J2 O1 g      System.out.println(" Server says: "+welcome);  
6 F3 S7 L# ^. }/ S# t$ T      client.out.println(keyboard.readLine());  
' S2 f, ?# s/ _! s' M     }catch(IOException e){  
& q$ b: }5 k$ l% f) m# A) V      System.out.println("\n The talk is CLOSED !");  
9 V3 @, l8 {3 N  F6 I+ y2 H      System.exit(1);  - \, i3 B4 C* n% Q$ K) o
    }  ( w6 z7 @8 z8 d0 C$ ^! i- W: r
    }  " o, F% X( \& Z6 s( m' D
    try{  # @) P1 n) V* o, _8 `" Q- C& v
      Thread.sleep(200);  
% I9 Z2 Q( i+ @. g$ T( W0 G    }catch(Exception e){  
6 g. l/ K! m6 W5 ]  _) @5 i  E      System.out.println("It is a bug !");  5 p. d& E5 T; z
    }  
" q- [  A* P' W! X% f' N  }  
$ c  b" ?# a$ ?}  
7 H1 w+ G" b' l0 o5 q- Y2 [class Client{  : a0 l9 _8 V+ Z. V; T5 Z
  public DataInputStream in;    S% y9 t* p! [% g' Q# u( I
  public PrintStream out;  ; o" }/ T* I9 B4 M) i3 U
  private Socket client;  
4 b+ s, w& H5 l# ]& {+ e  public Client(String host,int port){  
8 H' r5 w5 F8 R1 v; M    try{  
% m8 p  N8 V2 b- L      client=new Socket(host,port);  
2 V, b) m2 y: n; R' O: a      System.out.println("\n  
6 k" j! a; C! d- ~' `* _" k" N' q***************************************************");  
$ p3 A; Z" {# j6 g. _5 D! n      System.out.println("\n @(               Version 1.00 97/12/30 ");  
, ]; V3 I) u( s- j- U6 z1 [6 Y6 ~      System.out.println(" Copyright (c) 1997  " D7 n7 A& h) c& q. ]& H
          (Lui DongBing) All Rights Reserved.");  : O. N0 K" D: B7 F
      System.out.println("\n  
9 c1 J7 Y! S& W/ k**************************************************");  ) k" ~1 d5 C, N* o  u
      System.out.println("\n Client socket:"+client);  ( E5 _+ t. I" E% A, |# w) ^+ A1 I
      System.out.println("\n Client is ready ! \n");  
% |4 M( u# Q& z6 d" [      out=new PrintStream(client.getOutputStream());  
, H! B; h5 ]( j) J: H5 W      in=new DataInputStream(client.getInputStream());  % ?# H6 r! p7 O- I. f) t& E) C
     }catch(IOException e){  : k7 ?/ |9 f; H/ S- K: S, t
      System.out.println("\n IOException !\n"+e);  ; a7 \: g: B5 c
      System.exit(1);  
- i: X& S- g; D    }  
% k( v+ ~6 l2 ]: P  c9 O  }  
9 d  W! x3 u  _$ o" D7 ]* x}
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-6-16 06:17 , Processed in 0.450609 second(s), 69 queries .

    回顶部