QQ登录

只需要一步,快速开始

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

[转帖]Java应用技巧

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

206

主题

2

听众

882

积分

升级  70.5%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-3-31 01:14 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。  
; N) A4 }) w- @" M# L9 N8 v' B
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。  , z( M8 z* R2 N2 H

/ v9 x' s1 A; ]8 c% [) R$ u---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而  " n. f, h. H3 J+ ~3 ?) g; o2 i) z+ c& g
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。  
& |3 K9 k0 g0 I3 G: s% Y+ R6 F3 Y( }9 y2 f
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过  程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。  5 n  O* d6 k, a" E1 |
  V" K: h" l- N3 q. Y. E
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init  ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方  法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。  
( g: s2 v+ U5 a6 w" Q: D- V2 R2 Q- {* `1 }. F; n8 D( C7 T
---- 例 程 如 下:  
- m3 Z% Y7 a5 \7 F( s" K( S) `
" E0 e3 B7 A. t8 ^" y" [      import java.applet.*;  & x0 I- G* ?9 v( b; R" R1 b
      import java.awt.*;  " P. m8 g5 u4 J' O/ G8 R5 x/ h* h; \
      import java.awt.event.*;  
( Q+ _& S% r# C5 }5 i( m# G   
, w% z/ C8 D' t* p# u) H9 f
0 Y: z5 l' Y; Q0 U; T9 T/ H      public class Example extends Applet implements  
3 h2 s! ^; ~' i' e                       ActionListener{ //          public static void main(String[] args){  
7 e2 D" H+ k+ N1 T) G* `+ z           Frame win=new Frame("Example");  
4 V% V% k3 N6 i4 G+ X3 j6 T4 ~           Example example=new Example();  
% q& Y- G% t4 i9 J: U           win.add("enter", example);  ( L' G) x8 m0 a& x
           example.init();             //            win.setSize(600,360);  7 e' V* y: R0 T& O0 E
           win.setVisible(true);  
3 p! `, ~+ H/ u# A+ t. f" S. c         }  7 |2 S$ Y4 v2 R& M$ L
      public void init(){                        //            Button button;  
+ d5 M5 \0 X' [5 p$ p           Label  label;  0 B5 I% A+ E& ?) O6 f# L5 B/ N
           button=new Button(" OK "):  
) z8 ?# ]- e( G1 L8 v7 l* |           button.setBounds(280,200,100,20);  
6 O% P4 n3 Q7 j/ V; p           button.addActionListener(this);  
4 U+ W3 ?5 a, |" N9 e  Q: `! B           label=new Label();  ( |0 y0 G$ e7 M1 `, ?$ C" w
           label.setBounds(260,100,200,20);  9 j8 b0 [$ m' p! e
           add(button);    u/ W! \5 `3 W4 i/ {1 m* w: ~. ]1 m
           add(label);  
; |4 y$ f8 e, Y( D4 Y- v: h         }  0 E4 a6 {6 i+ b
       public void actionPerformed(ActionEvent e){  3 M! m: \6 O8 [" a- ~. s4 O/ q# D
           Object source=e.getSource();  9 P9 c% r( h0 A' g
           if(source==button){  
  ?! S) `  E* Y5 x8 O- P/ I             label.setText(" It is a example !");  
5 h5 O6 e5 j4 d( M9 p# i2 y4 [           }  5 f& y9 Q5 k7 I  k7 L$ R9 y. y, N
         }  2 a% q( {% A) d! O; T& f; c
      }  8 P. v. M* a3 v' m- Y) ?; w2 }, N. b

; d7 _; |# D8 G) s/ L2 s$ D" H---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。  
5 S" u' A, z0 X6 C" G& m& p/ s
: C, S% W# l; d---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作  为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。  
5 S, t! S% {2 v4 @5 T
' B) c+ O6 v, e& b8 R---- 2. Java 中 的 发 声 提 示  
% v4 ]$ w# i# I" v9 E
  y& r+ A( X* S- N! M# A9 V3 L: p7 r---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。  2 }9 Y/ {; B. ]! n0 \8 ?

& c- F( I! W6 p---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:  
" g/ V$ {/ `0 E/ l0 @
4 Q- Q5 X! i+ b( O, B0 v8 j6 d       AudioClip audio;  
( i" u4 ?0 t7 V, E         audio=getAudioClip(getCodeBase(),"Hi.au");  
. g3 H! F8 v* a         audio.play();  ( \. I! i( g1 c- \6 c
. d/ p% S* e# t0 d* \
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取  得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能  在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能  3 O2 C& J; Z4 O2 M
够 被 调 用 的 。  
/ Z- C( T) u' E; {+ ]: E/ A+ L
! ^7 n  ~; k1 j6 b" h5 e) G---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?  ; `% |9 H9 \6 L# e& f

$ \* Y( z9 e! Q6 M. h6 ?---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。  5 H6 q3 H6 E) F- ^1 Q0 Z+ L

' W' }- T; F  O' k& @---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实  现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。  
1 ?) N/ ?2 {$ W, S% L- o# i% L4 s6 K9 P+ {
---- 程 序 如 下:  3 P5 _$ r  v9 U7 n2 r4 x* }6 L

4 D0 v9 M% {$ j" ~( _, w 服 务 器:  8 M4 ?/ l: z, q/ v& D  w
import java.util.*;  
3 W9 y6 {- i: eimport java.io.*;  
$ o: l7 M  y  N+ p" iimport java.net.*;  
7 d5 `* I6 x. f9 c. f2 h' pimport java.awt.*;  7 R/ Q; N$ b! _3 }+ Q
! Y. G' @+ F8 {9 b
public class ServerT{  . ^5 l: N6 v: b% e
  public static void main(String[] args){  7 _/ c$ N" i2 O) B& s
    Server server;  8 r9 k+ i; v' @( h  R
    String clientRequest;  ; M; m1 x+ l4 V1 b
    boolean quit=false;  & D- B# e# \; K- E# ?; q
    server=new Server(8001);  
0 X, Z" W7 d, N8 p    while(!quit){  : R6 Y  B- U- _! S
      DataInputStream keyboard=new DataInputStream(System.in);  
2 r' _5 T4 y! f& N& j" S      try{  
6 u9 y, J, f' Y        clientRequest=server.in.readLine();  ) P& l' Q0 `; p# S
        if(clientRequest.trim().equals("CLOSE")){  ; y' r$ Y% X+ }3 N1 J" P
          System.out.println("Client says: "+clientRequest);  
* U% u2 |8 D& B2 N. @- i. r3 g4 t          System.exit(1);  
$ s) a# @3 I2 H7 u' y        }  * v# k/ ]2 o  a( Q& f
        System.out.println("Client says: "+clientRequest);  * I; V& G! B$ i
        server.out.println(keyboard.readLine());  
, g3 y" z# b* j. c# L# g       }catch(IOException e){  6 h0 p! ?" J7 ^, O7 U+ i: o
        System.out.println("IOException in server.in.readLine()"+e);  
* G' ~0 i8 t# u5 u        System.exit(1);  
  ?9 t- c+ V/ l4 D      }  
* ^) Y: u) G+ s3 d; |2 C    }  
" ]& u, [, W8 Q: }  }  
" l; P7 W; s2 Z4 U}    L! R- A8 C; w$ x6 w6 k
class Server{  
) B$ n6 Z3 y+ {0 i  private ServerSocket server;  ( q0 g/ ^: d; x. j9 s8 U4 A& W/ e
  private Socket socket;  
$ V7 r) z1 z" ]. S! P) K5 ?  public DataInputStream in;  
! D% n; \, n0 u3 `& ~: A4 f% p  public PrintStream out;  
2 Q& ]6 c; e; ^$ [) N  public Server(int port){  
) e+ ?5 i) G6 p) P# y6 O    try{  : Y! |) r) O' R5 e3 q: [# w
      server=new ServerSocket(port);  
0 {4 V: J& N9 I9 ~      System.out.println("\n  
/ O% ?9 [4 y- z0 `*************************************************");  - r# \$ d, B. W. M+ E# a
      System.out.println("\n @(              Version 1.00 97/12/30 ");  
# T. J9 h; v9 [( [$ p# g( f2 v      System.out.println(" Copyright (c) 1997  
* s! V% B, K3 N6 ]) w4 l              (Lui DongBing) All Rights Reserved.");  
- W, d) C& p) H/ P# M' h) p      System.out.println("\n  4 N* \# x" F( Z. Q6 k$ e
***************************************************");  + J0 }, v: Y. B+ C
      System.out.println("\n Server is: \n "+server);  
% C  \6 @+ X( _- [/ R) D' P      socket=server.accept();  
, ~1 L9 ]# [2 U) N( l      for(int i=0;I < 260;i++){    // 发 声 提 示  
! f4 q5 ]5 K% [        Toolkit.getDefaultToolkit().beep();  5 v6 b/ @, q" H
      }  : a' ?# l; x9 p9 ^9 Q6 K
      System.out.println("\n Server is ready ! \n");  
3 Y8 m& H1 Q+ k5 \      in=new DataInputStream(socket.getInputStream());  - u' C" l. ^) f+ {8 W9 ?
      out=new PrintStream(socket.getOutputStream());  
$ q) L/ t0 t5 W: i+ p9 j      out.println("We connect in "+new Date());  
( Z% Q/ X, ]- ~9 p! O* ^2 x# C    }catch(IOException e){  
* P/ R: M( f& D& _* A      System.out.println("Server is failied !");  - o6 y: H  @2 @- n8 T
    }  
% O0 q2 L- Y3 z: a- y& S  }  
9 ^) c/ n7 m  }2 j) ^% r" Q}  
! v8 s# a8 [- O5 H* j   
; w9 I5 a- {; d5 n) O: N* a  I& e# Y- c: A
客 户 机 :  
( A4 b' Q& V4 b% @5 x0 `import java.util.*;  
; b& n5 m- p: `+ r! yimport java.io.*;  9 S" t( @7 f! s- a6 L
import java.net.*;  # C( f) I( Q6 V) }& r

6 U$ ?" f! {/ H% bpublic class ClientT{  
# N+ e( R: o. L7 N' g& }2 ^  public static void main(String[] args){  
. @" Q1 A- v$ s- ]- V    String welcome,response;  & i' N4 r: H8 f0 k, g! @  l
    Client client;  
5 h7 O' F9 T: K8 a    client=new Client("202.120.80.20",8001);       //      DataInputStream keyboard=new DataInputStream(System.in);  8 ]9 J8 F. z" v4 o
    boolean Bye=false;  
" K  m- w8 A9 t1 p- F" K# \/ i" m    while(!Bye){  % Q5 {; [+ A# h, n4 X: R
    try{    R+ g. P- D- c0 Z- ^* a' r
      welcome=client.in.readLine();  $ F" Q7 g0 o! W7 o0 b* Y
      System.out.println(" Server says: "+welcome);  5 \; |5 e" W+ @$ n& I# p* l
      client.out.println(keyboard.readLine());  
8 S4 j6 O: m6 l& l1 M& i+ Q     }catch(IOException e){  + q6 d* r* @0 \9 Y& y  X
      System.out.println("\n The talk is CLOSED !");  
7 ^/ L' e3 j" T! ?9 S3 N' d      System.exit(1);  
6 r3 G% `8 d: a& A# v    }  
5 J6 u3 t. s8 ~. [: k: o    }  0 X: g# b3 [( N7 P* _5 k
    try{  ) p  F+ M+ C; Z! T$ M4 a& e$ K
      Thread.sleep(200);  
+ |  |6 O; {- e' a, f1 Y- d    }catch(Exception e){  
, I) }4 x$ x9 [& \. n/ i. W, `' W      System.out.println("It is a bug !");  
1 R6 J9 M8 ]: x! j* E3 A- M, E    }  / k% f0 h! \/ S4 Y9 G/ Z! X& a) `. V
  }  : z! c# ~9 M9 J; L! m4 N1 W; G
}  5 ~4 A; h: J9 M2 _1 F. D& p# g
class Client{  
2 i4 M0 |, D1 i' K  public DataInputStream in;  7 G9 j& }0 r3 w1 Z6 [, I& x
  public PrintStream out;  
( a- C) W; H& L. ~  private Socket client;  1 Q1 ~# W: P4 T4 p
  public Client(String host,int port){  1 Y1 W* l/ Z8 J6 M- Y7 v
    try{  9 X; o4 s# l4 ~( R9 {3 [; b+ `
      client=new Socket(host,port);  
. p! ?- K# }! j- r      System.out.println("\n  
. j' i" U  F. u2 H+ B***************************************************");  
/ ~9 M8 Z; y1 L, r: {. a% r      System.out.println("\n @(               Version 1.00 97/12/30 ");  5 c6 Z% ~6 Z: s8 C* h' m6 c
      System.out.println(" Copyright (c) 1997  0 K( f2 X1 E1 [1 N$ C0 I& z
          (Lui DongBing) All Rights Reserved.");  1 q5 p; E: P" \; S5 w# c, N
      System.out.println("\n  # @, _7 @" W; e8 s" o8 J4 }" J- n
**************************************************");  8 n4 i/ q- ]; i6 B: W
      System.out.println("\n Client socket:"+client);  : d& Q  Q) [0 c6 k
      System.out.println("\n Client is ready ! \n");  
- O) X! H/ k, C2 Z* {5 n      out=new PrintStream(client.getOutputStream());  2 F( }  _! a# i4 r2 f  L: A! q% V8 w
      in=new DataInputStream(client.getInputStream());  
& N7 U: X. H, l! y7 G) {0 I7 q* [+ \! g     }catch(IOException e){  $ {- g7 ]8 W9 w) |
      System.out.println("\n IOException !\n"+e);  
5 Q1 M. Q0 w0 b4 J      System.exit(1);  
  h. J2 a% q1 O( {6 K' y    }  
3 A8 }4 c! `' g9 R3 `1 V  }  
- Q& ]3 r% }" U, j$ u4 b; D4 Q}
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-11-1 14:16 , Processed in 0.540976 second(s), 70 queries .

    回顶部