QQ登录

只需要一步,快速开始

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

[转帖]Java应用技巧

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-3-31 01:14 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。  
* I) s2 M" ]  Z3 ~
% f1 Q, o& D2 E2 H  V---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。  ) I0 l* J4 K, P

7 I- q& C1 A7 s5 b3 |# w---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而  ' o8 Y$ K; \; w. A! F8 V
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。  
, O- ~; X6 f4 j- {( S* r
/ U0 Q6 c  O0 C7 o- w% ~---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过  程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。  ( D7 X! p& u: T/ Y0 |5 E

1 ?7 I8 ~/ w( T* J- K1 A: v---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init  ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方  法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。    A  C! T) W' |8 F. O' P' ]! a
7 ?& K8 K1 R0 W; `+ B3 M! b
---- 例 程 如 下:  0 _* j! R- V4 N1 v# _" \

! D* M$ O6 `% T+ j1 Z0 d7 ]      import java.applet.*;  1 Z/ i! p6 n  l0 g
      import java.awt.*;  
/ o3 E$ L5 B+ U* H2 g! I3 v, S      import java.awt.event.*;  
: x. j* z& b0 Y   9 u. Q; f; W! Z% O: f

% p. n/ o0 y- N/ Y, F2 H- A& T      public class Example extends Applet implements  
: d% d  V9 y! U  R2 {% F                       ActionListener{ //          public static void main(String[] args){  / c) c4 {! k. a! f0 {/ d9 p# n) O
           Frame win=new Frame("Example");  / q0 A; B; G( D- b0 k. U% n! ?
           Example example=new Example();  7 V' O; O" p4 [" g  v
           win.add("enter", example);  5 b6 z# M) o) o  a* i2 k
           example.init();             //            win.setSize(600,360);  
8 e7 b$ o2 Q) R( I( g; k# g" c           win.setVisible(true);  
7 ~3 Q- d3 X& t3 Q4 q. o+ `9 R; e/ b         }  
& H5 u% j: h& n  [1 r* l      public void init(){                        //            Button button;  
% [4 t" D, ^& d4 e3 L, @4 g           Label  label;    ^% r6 n6 t1 K
           button=new Button(" OK "):  2 t2 D& _2 t; r$ R9 T2 [6 o
           button.setBounds(280,200,100,20);  3 Y8 g4 S# i9 M# }( z6 C
           button.addActionListener(this);  ) N  L0 U3 o# z+ p8 ^4 o" T
           label=new Label();  3 I* I& d4 X9 h( J0 c
           label.setBounds(260,100,200,20);  
3 u- \4 v5 E0 i5 g7 `- e           add(button);  
% _" l& A6 \: c8 K1 ^" d           add(label);  
, v, S* I/ Q# J# d1 x! N5 i         }  ; i: B" s3 X9 R1 R
       public void actionPerformed(ActionEvent e){  " P" X1 K# A1 T7 }# T/ l1 ]
           Object source=e.getSource();  
* T* v- A5 E9 b5 F* D+ H           if(source==button){  
7 Q* X4 q+ {. y; m& d6 K6 G             label.setText(" It is a example !");  
- u% ^: m/ [' R4 ^4 D' H           }  5 `( i1 S* B! M+ G5 B, @8 U
         }    {7 k7 y" q4 K6 C5 G9 i
      }  
/ L: L1 }0 j8 X4 V$ T. L. b% O% E
8 D/ z" A: g# \) o---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。  
& Y! u3 p. }: u! ?  t& s$ [
- i, @0 Z9 z( |( g: h6 M2 W# m+ H1 X$ ?6 B---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作  为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。  
. Q% j1 f2 m5 F  {$ }% Z4 P) _. q3 r! L, H! I, k
---- 2. Java 中 的 发 声 提 示  + w" [2 R6 |$ x$ h8 |0 ]& K6 a& ]

- u  |+ q% U- C---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。  & c  \( `7 C8 Q: V. K% O! a
; F; Y* g- m6 T0 M: d; n  s
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:  $ M* p0 N+ o9 ^4 A# o: S& d9 I
: m* V" K  E6 [) h! u7 n
       AudioClip audio;  ( v8 t& ]6 J6 R' `  L
         audio=getAudioClip(getCodeBase(),"Hi.au");  
1 v1 v/ L& c! k6 I4 _* D         audio.play();  & }- \2 U8 z* c9 h# d2 O: n- ^

4 C; q1 U7 f8 v( T---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取  得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能  在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能  * u, d9 i5 I+ L8 `
够 被 调 用 的 。  ' b* g' Y6 e3 T8 N
+ e( A# [3 ?1 u" |, q3 M
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?  $ K* Q* P3 O% ~! Q

' i$ v- K3 L4 S' w---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。  : u3 g# d1 T4 W5 @4 H

" r: m; U1 k+ ]2 A" k---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实  现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。  
+ h* i6 @$ M7 w. @+ L% E
7 z' L' K6 V0 C---- 程 序 如 下:  
* L  x& Y* w2 c; `# r2 j! b6 ]' x+ m
服 务 器:  
7 b* u4 z$ s. Z6 w0 _import java.util.*;  
, u7 v8 q% m6 uimport java.io.*;  2 ]$ ~5 K6 l8 I. r/ \
import java.net.*;  
, M2 L+ |8 ~, u% _import java.awt.*;    I& ]# {4 t# w4 Y& m; ^
1 }7 Z/ ^( o* U
public class ServerT{  
. H6 h; t: g9 D$ a5 z* {, h" ]0 A' |; L: F  public static void main(String[] args){  
6 O8 r! M+ Z: W5 [3 J    Server server;  6 k" z( L. F5 [
    String clientRequest;  7 ?; y( `  o. J6 v- p; e. E" {  B
    boolean quit=false;  
% I2 f' W4 l; g9 t    server=new Server(8001);  7 v+ v5 g& M: ^4 Y) ?" f
    while(!quit){  , Y/ _# _' F& E1 P2 c
      DataInputStream keyboard=new DataInputStream(System.in);  ! _/ q* U$ X5 ^+ p- F  B
      try{  
+ ^9 V2 x2 C4 Q0 f+ y        clientRequest=server.in.readLine();  
6 [  T2 y5 s  |4 X        if(clientRequest.trim().equals("CLOSE")){  
( h* E/ }  y1 O: d) g          System.out.println("Client says: "+clientRequest);  
& Y1 p5 p# H! p: z          System.exit(1);  ! K1 g1 P) e, m& M' k: J' ?2 F
        }  7 Y- m, t, w, X5 o3 y3 r, i$ k7 k) v
        System.out.println("Client says: "+clientRequest);  
0 `' o  B3 P0 ^3 f4 S2 R: u        server.out.println(keyboard.readLine());  $ z/ o1 V! Z- v. B, E  h. m
       }catch(IOException e){  
: G) r: y, Q- H( A  W        System.out.println("IOException in server.in.readLine()"+e);  * B$ T6 Y% M, y
        System.exit(1);  
. Z( f3 V$ l( i- s3 _% `. d      }  . F$ Q8 @2 }& g* l0 ?
    }  4 q8 y1 w! \% q
  }  , F7 N5 Q: S+ z
}  " f4 v1 w" p* T: w9 k
class Server{  . ~. l' q7 W6 ?5 j6 Y7 ]
  private ServerSocket server;  
6 ]! F1 b: g0 H  private Socket socket;  ! T" T; @, l9 N* H9 `* o3 I" g! b
  public DataInputStream in;  
5 `0 g) H( r4 E  ]# ~( Q  public PrintStream out;  9 t1 E' l" G" r! L6 r  I6 h
  public Server(int port){  
! g! g; O- c( F( y1 P    try{  
& c# \6 [0 P$ m      server=new ServerSocket(port);  
4 p7 p1 s* w0 I( [4 t      System.out.println("\n  , q) h/ l0 @2 n% G; _; _
*************************************************");  6 B/ L, r# n9 [+ f# J4 z  M* x
      System.out.println("\n @(              Version 1.00 97/12/30 ");  
3 B6 O5 t4 {' E( w% t% b      System.out.println(" Copyright (c) 1997  * g+ ?) k8 f) E( a" Y
              (Lui DongBing) All Rights Reserved.");  5 d& p& B3 i9 b+ y- ]/ o0 @
      System.out.println("\n  5 ~& x( V4 W1 b
***************************************************");  & H* Y- t: M$ d. E/ k
      System.out.println("\n Server is: \n "+server);  
! `, \# \  R+ W$ w      socket=server.accept();  1 R# |4 E5 o- V* {  c- }0 ~
      for(int i=0;I < 260;i++){    // 发 声 提 示  
% M& U1 \& T/ j: b- w2 i* w        Toolkit.getDefaultToolkit().beep();  
; _& o5 @$ L+ k      }  
# _; c! n* I* h5 d# M) v0 X# m      System.out.println("\n Server is ready ! \n");  
0 l  ~% N# u/ k$ o% ~# e0 d- g      in=new DataInputStream(socket.getInputStream());  " r) D3 \, d: g
      out=new PrintStream(socket.getOutputStream());  
% \- ^+ l, f* s* J      out.println("We connect in "+new Date());  
9 v8 b& v: t: i* D+ o, Q7 P& p! O7 U# _" o    }catch(IOException e){  # ~) m" w1 M8 e" a+ A" ?) E
      System.out.println("Server is failied !");  
2 N4 `0 Y8 x: c) V3 k4 e: P+ V    }  " w5 ?9 S4 |$ ?! u9 ]! n, `- ]4 a% S* B
  }  : A% V) |& Z$ |0 ^& P' G8 h! {0 D
}  2 w7 Y7 y( C) \; D% o1 n
   
3 P2 H, o* ~2 U9 e! D9 N+ g  J  G2 A7 i( X0 w0 q3 c, W  O
客 户 机 :  
$ r" W7 @. F0 d/ k! Aimport java.util.*;  ! y) \* D' g+ n& G
import java.io.*;  1 `: c* \7 _. o+ ~1 [$ \
import java.net.*;  * q9 i6 P! v6 i' _' U

+ d$ a" k8 R  d7 V$ g" {7 G2 T- _public class ClientT{  
- @9 g. v; `1 b3 [( H9 N  public static void main(String[] args){  
' o! e& C% E+ U) @. M1 y7 I    String welcome,response;  , `; K, F4 T4 s+ [2 }3 l, \5 \
    Client client;  
' L9 B* y+ ?) D% P" D# A+ c    client=new Client("202.120.80.20",8001);       //      DataInputStream keyboard=new DataInputStream(System.in);  
6 K% g8 i8 i; W: C" b4 [8 V    boolean Bye=false;  
1 \% ^" N4 P, |/ z1 @7 o: V3 z    while(!Bye){  
3 V8 \( _- G; i    try{  
( ^+ T) S; i! [      welcome=client.in.readLine();  9 y1 c' Q6 T! L4 L" G! ~* X: P3 i
      System.out.println(" Server says: "+welcome);  ; d5 f0 x0 s2 P3 m4 k
      client.out.println(keyboard.readLine());  
5 S" h* s4 K) C5 L     }catch(IOException e){  5 j$ l4 r: k( O  A$ Z- ]5 O2 s" K
      System.out.println("\n The talk is CLOSED !");  
1 Z5 i8 y* F) p, e      System.exit(1);  
  i) s  Z" C9 v* a- m/ a* U    }  
, N/ Y6 x/ J( ]! ^9 b0 t$ F8 X# K0 A% K    }  , @8 O8 D0 x4 H$ K0 o( t
    try{  
' X" D/ a/ [2 Z* w  m4 z7 G      Thread.sleep(200);  8 S, d3 N8 w3 K
    }catch(Exception e){  : M9 ?$ j( G% n5 w
      System.out.println("It is a bug !");  0 g' _* e& C4 [4 o, f! X2 i7 r
    }  / l* c% V! d* b# x" {, X2 g
  }  " |" [) A* a& K2 O3 M8 r
}  9 C/ o, Y. U$ j) O7 O4 l) {
class Client{  
/ L* Q$ v8 B- d. w, u  public DataInputStream in;  
0 n9 q* C7 W7 X! K7 D$ A' ?& N* V  public PrintStream out;  8 T3 g- ~& ^- J/ k4 Y; A, `4 Q" A
  private Socket client;  ' F8 g2 X) y- x1 O5 p1 A! A7 t& x
  public Client(String host,int port){  
1 a( m2 T3 i1 z$ W% {    try{  9 k" c' }5 A8 Q+ c' e$ x; Y
      client=new Socket(host,port);  
+ m( t. {5 b$ M$ [      System.out.println("\n  . f( F7 l6 ^) p: X
***************************************************");  
* y( |! F" p7 h" `( D6 g: U( B3 w/ T      System.out.println("\n @(               Version 1.00 97/12/30 ");  
, B$ g: {8 e; e, x7 ]( w# m9 Y' Y. L      System.out.println(" Copyright (c) 1997  
& N* Y. H4 S1 R9 N/ E* j, M% m          (Lui DongBing) All Rights Reserved.");  
  A; h5 f# l5 T/ {      System.out.println("\n  
0 L+ y+ V( d* c0 Q8 v; p7 o7 x**************************************************");  
0 M$ a: Z. {, w. ]3 F' D& K: U3 z- H      System.out.println("\n Client socket:"+client);  9 V& g) a) g0 }% N- ?* {' G
      System.out.println("\n Client is ready ! \n");  
3 N. A* x+ U  R- b' L8 v      out=new PrintStream(client.getOutputStream());  
1 X& [  a" Y9 D% Z* {      in=new DataInputStream(client.getInputStream());  
9 c  U/ F  M) P, n5 H# X( [! r     }catch(IOException e){  
; B- p  Q. K6 v) t6 r& b      System.out.println("\n IOException !\n"+e);  " M: ~4 E# o8 ?5 ^
      System.exit(1);  
% i5 s: k! v) F    }  
0 h1 D1 I6 A: k: m  }  ) n  {& [  w7 P1 O; u1 \
}
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

    回复

    使用道具 举报

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

    fastpost qq
    收缩
    • 电话咨询

    • 04714969085

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-10-31 21:59 , Processed in 0.352775 second(s), 69 queries .

    回顶部