国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

JavaApplet編程技巧

2019-11-18 11:57:51
字體:
來源:轉載
供稿:網友

  1. java Applet 概 述
  Java Applet 程 序 分 為 兩 類:Java 小 程 序(Applet) 和Java 應 用 程 序(application), 這 兩 類 程 序 是 有 區(qū) 別 的。Java Applet 嵌 入 在WWW 的 頁 面, 作 為 頁 面 的 組 成 部 分 被 下 載, 并 能 運 行 在 實 現(xiàn)Java 虛 機 器(JVM) 的Web 瀏 覽 器 中。Java 的 安 全 機 制 可 以 防 止 小 程 序 存 取 本 地 文 件 或 其 他 安 全 方 面 的 問 題。 而 一 個Java 應 用 程 序 運 行 于Web 瀏 覽 器 之 外, 沒 有Applet 運 行 時 的 諸 多 限 制。 另 外, 兩 者 程 序 設 計 上 的 最 大 區(qū) 別 在 于:Java Applet 沒 有 主 程 序, 而Java 應 用 程 序 一 定 要 有 主 程 序。 在Java 中 每 個applet 都 是 由Applet 的 子 類 來 實 現(xiàn)。 開 發(fā) 人 員 自 定 義 的applet 通 過 重 載Applet 的 幾 個 主 要 成 員 函 數 完 成 小 應 用 程 序 的 初 始 化、 繪 制 和 運 行。 這 些 函 數 是init( )、paint( )、start( )、stop( ) 和destory( )。
  
  一 個applet 的 生 命 周 期 與Web 頁 面 有 關。 當 首 次 加 載 含applet 的 頁 面 時, 瀏 覽 器 調 用init( ) 方 法, 完 成applet 的 初 始 化。 然 后 調 用paint( ) 或start( ) 方 法 繪 制 或 啟 動 程 序。 當 用 戶 離 開 頁 面 時, 瀏 覽 器 調 用stop( ) 方 法 停 止 小 程 序 運 行。 若 用 戶 關 閉 瀏 覽 器 將 使applet 停 止 運 行, 瀏 覽 器 調 用destory( ) 方 法 終 止, 使 小 應 用 程 序 有 機 會 釋 放 其 存 在 期 間 鎖 定 的 資 源。 只 要 用 戶 不 關 閉 瀏 覽 器, 重 新 加 載 頁 面, 瀏 覽 器 則 只 調 用start( ) 方 法 和paint( ) 方 法 重 新 繪 制 并 運 行 小 程 序。Applet 生 命 周 期 如 圖1 所 示。
  
  
  
  
  
  2. 擴 展 小 程 序 基 類 支 持 多 線 程
  通 常 情 況 下, 設 計 小 程 序 是 為 了 給 主 頁 增 加 交 互 性, 使 頁 面 更 加 生 動 活 潑。 因 此, 那 些 真 正 有 用 小 程 序, 如 動 畫、 實 時 更 新Internet 服 務 器 信 息 回 取、 一 般 娛 樂 等 通 常 都 是 持 續(xù) 運 行 的, 即 小 程 序 的 邏 輯 主 體 存 在 著 無 限 循 環(huán)。 這 個 邏 輯 主 體 不 宜 放 在 幾 個 瀏 覽 器 調 用 方 法 中, 如init( )、paint( )、
  start( ) 等。 這 是 因 為 隱 含 情 況 下, 小 程 序 所 有 主 邏 輯 都 采 用 單 一 線 程。 當 瀏 覽 器 調 用 方 法 中 出 現(xiàn) 死 循 環(huán), 則 程 序 控 制 不 返 回。 如 果 用 戶 換 到 另 一 個 頁 面 之 后 小 程 序 還 在 運 行, 就 會 浪 費 處 理 器 資 源。 你 可 以 做 一 個 實 驗, 使 用 小 程 序 查 閱 器 運 行 小 程 序, 你 會 發(fā) 現(xiàn) 查 閱 器 本 身 完 全 停 止 作 用, 因 為 它 要 等 到 調 用 函 數 返 回 后, 才 能 繼 續(xù) 處 理 其 他 事 情( 如 響 應 菜 單)。 顯 然, 這 個 邏 輯 主 體 必 須 放 在 其 他 地 方。 解 決 方 法 是 在 小 程 序 框 架 中 加 入 線 程, 把 邏 輯 主 體 放 在 線 程run( ) 方 法 中。 只 在 瀏 覽 器 調 用 方 法start( ) 中 生 成 線 程, 而 在
  stop( ) 中 終 止 線 程 運 行, 這 樣 當 用 戶 不 查 閱 時 不 會 占 用 處 理 器 資 源。 圖2 表 示 瀏 覽 器、 小 程 序 和 線 程 之 間 的 關 系。
  
  
  
  由 于 瀏 覽 器/ 小 程 序/ 線 程 是 所 有 瀏 覽 器 都 采 用 的 模 型, 而Java.applet.Applet 類 本 身 并 不 支 持 線 程。 在 實 際 使 用 中, 為 方 便 操 作, 我 們 可 以 派 生Applet 類 生 成 一 個 支 持 線 程 的 子 類, 今 后 再 編 寫applet 時, 就 可 以 直 接 從 子 類 中 派 生, 程 序 邏 輯 主 體 放 在run( ) 方 法 中, 將 線 程 控 制 隱 藏 起 來。 這 個 子 類 如 下:
  
  import Java.applet.*;
  import Java.awt.*;
  class MultiThreadApplet extends Applet implements Runnable {
  Thread thisThread;
  Public void start( ) { if(thisThread==null) {
  thisThread=new Thread(this);
  thisThread.start( );{
  }
  public void stop( ) {
  if (thisThread! =null) {
  thisThread.stop( );
  thisThread=null;}
  }
  public void run ( ) {}}
  由 于run( ) 是 接 口Runnable 的 抽 象 方 法, 所 以 在MultiThreadApplet 類 中 也 需 要 進 行 定 義, 只 不 過 內 容 為 空。 下 面 的 例 子 顯 示 如 何 使 用 這 個 類。 程 序 包 含 一 個 無 限 循 環(huán) 累 加 操 作, 并 將 結 果 顯 示 在 屏 幕 上:
  
  import java.awt.*;
  public class counter extends MultiThreadApplet{
  int Counter;
  public void run( ){
  while(true){
  counter++;
  repaint( );}
  }
  public void paint(Graphics g) {
  g.drawString(string.valueof(counter),10,10);{
  }
  很 顯 然, 這 個 小 程 序 對 線 程 的 操 作 已 被 隱 藏 在Multi ThreadApplet 中。
  
  
  
  3. 解 決 動 畫 中 的 一 些 問 題
  動 畫 的 本 質 就 是 運 動 的 圖 形, 一 系 列 連 續(xù) 顯 示 的 靜 止 圖 形 會 給 我 們 一 種 連 續(xù) 動 畫 的 假 象。 只 要 動 畫 速 度 足 夠 快, 則 分 散 的 靜 止 圖 形 就 會 合 并 成 一 個 連 續(xù) 運 動 的 流 程。
  
  繪 制 動 畫 十 分 簡 單, 只 需 遵 照 以 下 三 步 即 可;(1) 擦 去 整 個 小 程 序 繪 圖 區(qū);(2) 重 畫 動 畫 背 景;(3) 在 新 的 位 置 繪 制 圖 形。 但 是, 當 動 畫 連 續(xù) 幀 之 間 運 動 和 顏 色 不 連 續(xù) 時 就 會 發(fā) 生 閃 爍 現(xiàn) 象( 例 子 略)。 問 題 出 在 小 程 序 區(qū) 的 屏 幕 刷 新 上, 有 兩 種 方 法 可 以 防 止 動 畫 閃 爍。 第 一 種 方 法 是 只 做 局 部 刷 新, 即 每 次 只 擦 除 改 變 的 部 分。 例 如: 如 果 要 繪 制 一 幅" 飛 行 的 星 空" 動 畫, 每 次 刷 新 操 作, 先 擦 去 前 一 位 置 的 星 星, 再 在 新 的 位 置 繪 制 一 個。 但 是, 如 果 動 畫 比 較 復 雜, 運 動 部 分 重 疊 較 多, 則 局 部 刷 新 操 作 很 繁 瑣 也 影 響 程 序 運 行 速 度。 在 這 種 情 況 下, 可 以 用 另 外 一 種 方 法( 雙 緩 存) 來 解 決 閃 爍 問 題。 它 的 核 心 思 想 是 在 屏 幕 外 完 成 一 幀 的 全 部 動 畫, 然 后 把 最 后 繪 制 完 的 幀 顯 示 在 小 程 序 屏 幕 上。 過 程 如 圖3 所 示。
  
  
  
  示 例 程 序 如 下:
  
  import java.awt.*;
  public class Ball extends MultiThreadApplet {
  Image ball=null;
  Image applet=null;
  Graphics appletG,ballG;
  Public void run( ){
  If(ball= =null){
  Applet=createlmage(bounds( ).width,bounds( ).
  Height);
  Ball=create Image(70,70);
  AppletG=applet.getGraphics( );
  BallG=ball.getGraphics( );
  BallG.setColor(Color.gray);
  BallG.drawOral(0,0,70,70); {
  For(int x=0;x <400;x++) { Double angle="((double)x)/20;" Int y="(int)(Math.abs(Math.sin(angle))*80);" AppletG.clearRect(0,0,bounds( ).width.bounds( ), Helght); DrawBackground(appletG); AppletG.drawImage(ball,x.80-y,this); This.getGraphics( ).drawImage(applet,0,0,this); Try { Thread.sleep(25); } catch(Exception ignored) {}} } PRivate void drawBackground(Graphics g) { for(int I="0;I" < 1;I++){ g.drawLine(0.i*10,400,I*10); } } }
  小 程 序 首 先 用createImage( ) 取 得 與 小 程 序 大 小 完 全 相 同 的 屏 外 圖 形 緩 存, 賦 給 變 量applet, 然 后 得 到 緩 存 的 繪 圖 對 象appletG。 以 后 對 幀 的 刷 新 操 作 過 程都 是 針 對appletG。 這 包 括 清 除 幀、 繪 制 背 景、 在 新 位 置 繪 制 圖 形。最后再用drawImage ( ) 方 法 把 緩 存 復 制 到 小 程 序 的 屏 幕 顯 示 區(qū)。 運 行 這 個 小 程 序, 你 會 發(fā) 現(xiàn) 動 畫 非 常 平 滑, 不 存 在 閃 爍 現(xiàn) 象。
  
  除 了 閃 爍 之 外, 如 果 動 畫 過 于 復 雜, 幀 速 率 就 可 能 降 低。 若 動 畫 降 到 每 秒20, 幀 是 動 畫 會 出 現(xiàn) 間 斷 現(xiàn) 象 影 響 顯 示 效 果。 因 此 有 必 要 優(yōu) 化 動 畫 速 度, 下 面 列 出 了 一 些 可 行 的 方 案;(1) 畫 得 盡 可 能 少;(2) 用 較 快 的 繪 圖 算 法;(3) 用 顏 色 循 環(huán) 等 技 巧 來 繪 畫 某 一 部 分;(4) 用 圖 案 來 表 示 細 節(jié);(5) 用 定 點 整 數 進 行 三 維 計 算;(6) 用 查 詢 的 預 先 計 算 結 果 來 處 理 復 雜 算 法。
  
  
  
  4. 縮 短 小 程 序 裝 入 時 間
  真 正 功 能 性 的 小 程 序 本 身 并 不 小, 這 就 意 味 著 小 程 序 從Internet 上 下 載 需 要 花 很 多 時 間。 隨 著 小 程 序 的 普 及, 越 來 越 多 的Internet 頻 帶 被 用 于 從 各 地 的 服 務 器 向 客 戶 端Web 瀏 覽 器 傳 送 這 些 小 程 序, 因 此 響 應 時 間 進 一 步 下 降。 為 了 縮 短 小 程 序 下 載 和 裝 入 時 間, 可 以 采 取 以 下3 種 方 法。
  
  使 執(zhí) 行 文 件 盡 量 小 盡 管Internet(TCP 協(xié) 議) 可 以 接 受 任 意 長 度 的 數 據 流, 但 負 責 點 對 點 傳 送 的 網 絡 設 備( 例 如: 路 由 器) 對 一 次 傳 送 分 組 包 的 上 限 有 嚴 格 的 限 制, 通 常 這 一 限 制 是256 的 整 數 倍。 因 此

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 苍山县| 江都市| 乌拉特前旗| 甘德县| 科尔| 大同市| 东宁县| 四子王旗| 桐乡市| 盘锦市| 景德镇市| 洛浦县| 休宁县| 巩留县| 施甸县| 绥芬河市| 仁化县| 伽师县| 乌鲁木齐市| 大足县| 宁陕县| 怀来县| 罗城| 高青县| 丰顺县| 台东市| 白银市| 西藏| 安福县| 上蔡县| 平塘县| 安丘市| 静安区| 庆城县| 泸西县| 和田市| 东源县| 炉霍县| 阿图什市| 威宁| 江口县|