韩剧1988免费观看全集_久久影视三级福利片_亚洲视频在线观看免费_在线观看欧美日韩_国产亚洲激情在线_亚洲精品美女久久久_欧美国产日韩一区二区在线观看_91在线观看免费高清完整版在线观看_日韩av免费看_国产又爽又黄的激情精品视频_琪琪亚洲精品午夜在线_欧美性猛xxx_不卡毛片在线看_国产亚洲日本欧美韩国_91国内在线视频_精品国产福利视频

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

Java優(yōu)化性能技巧集錦(2)

Java優(yōu)化性能技巧集錦(2)

更新時(shí)間:2022-10-14 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

三、GUI篇

這一部分介紹的內(nèi)容適合于圖形用戶(hù)界面的應(yīng)用(Applet和普通應(yīng)用),要用到AWT或Swing。

3.1 用JAR壓縮類(lèi)文件

Java檔案文件(JAR文件)是根據(jù)JavaBean標(biāo)準(zhǔn)壓縮的文件,是發(fā)布JavaBean組件的主要方式和推薦方式。JAR檔案有助于減少文件體積,縮短下載時(shí)間。例如,它有助于Applet提高啟動(dòng)速度。一個(gè)JAR文件可以包含一個(gè)或者多個(gè)相關(guān)的Bean以及支持文件,比如圖形、聲音、HTML和其他資源。

要在HTML/JSP文件中指定JAR文件,只需在Applet標(biāo)記中加入ARCHIVE = "name.jar"聲明。

請(qǐng)參見(jiàn)《使用檔案文件提高 applet 的加載速度》。

3.2 提示Applet裝入進(jìn)程

你是否看到過(guò)使用Applet的網(wǎng)站,注意到在應(yīng)該運(yùn)行Applet的地方出現(xiàn)了一個(gè)占位符?當(dāng)Applet的下載時(shí)間較長(zhǎng)時(shí),會(huì)發(fā)生什么事情?最大的可能就是用戶(hù)掉頭離去。在這種情況下,顯示一個(gè)Applet正在下載的信息無(wú)疑有助于鼓勵(lì)用戶(hù)繼續(xù)等待。

下面我們來(lái)看看一種具體的實(shí)現(xiàn)方法。首先創(chuàng)建一個(gè)很小的Applet,該Applet負(fù)責(zé)在后臺(tái)下載正式的Applet:


import java.applet.Applet;
import java.applet.AppletStub;
import java.awt.Label;
import java.awt.Graphics;
import java.awt.GridLayout;
public class PreLoader extends Applet implements Runnable, AppletStub {
 String largeAppletName;
 Label label;
 public void init() {
// 要求裝載的正式Applet
largeAppletName = getParameter("applet");
// “請(qǐng)稍等”提示信息
label = new Label("請(qǐng)稍等..." + largeAppletName);
add(label);
 }
 public void run(){
try {
 // 獲得待裝載Applet的類(lèi)
 Class largeAppletClass = Class.forName(largeAppletName);
 // 創(chuàng)建待裝載Applet的實(shí)例
Applet largeApplet = (Applet)largeAppletClass.newInstance();
 // 設(shè)置該Applet的Stub程序
 largeApplet.setStub(this);
 // 取消“請(qǐng)稍等”信息
remove(label);
// 設(shè)置布局
setLayout(new GridLayout(1, 0));
add(largeApplet);
// 顯示正式的Applet
largeApplet.init();
largeApplet.start();
 }
 catch (Exception ex) {
// 顯示錯(cuò)誤信息
label.setText("不能裝入指定的Applet");
 }
 // 刷新屏幕
 validate();
}
public void appletResize(int width, int height) {
// 把a(bǔ)ppletResize調(diào)用從stub程序傳遞到Applet
 resize(width, height);
}
}



編譯后的代碼小于2K,下載速度很快。代碼中有幾個(gè)地方值得注意。首先,PreLoader實(shí)現(xiàn)了AppletStub接口。一般地,Applet從調(diào)用者判斷自己的codebase。在本例中,我們必須調(diào)用setStub()告訴Applet到哪里提取這個(gè)信息。另一個(gè)值得注意的地方是,AppletStub接口包含許多和Applet類(lèi)一樣的方法,但appletResize()方法除外。這里我們把對(duì)appletResize()方法的調(diào)用傳遞給了resize()方法。

3.3 在畫(huà)出圖形之前預(yù)先裝入它

ImageObserver接口可用來(lái)接收?qǐng)D形裝入的提示信息。ImageObserver接口只有一個(gè)方法imageUpdate(),能夠用一次repaint()操作在屏幕上畫(huà)出圖形。下面提供了一個(gè)例子。


public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) {
 if ((flags & ALLBITS) !=0 {
repaint();
 }
 else if (flags & (ERROR |ABORT )) != 0) {
error = true;
// 文件沒(méi)有找到,考慮顯示一個(gè)占位符
repaint();
}
return (flags & (ALLBITS | ERROR| ABORT)) == 0;
}



當(dāng)圖形信息可用時(shí),imageUpdate()方法被調(diào)用。如果需要進(jìn)一步更新,該方法返回true;如果所需信息已經(jīng)得到,該方法返回false。

3.4 覆蓋update方法

update()方法的默認(rèn)動(dòng)作是清除屏幕,然后調(diào)用paint()方法。如果使用默認(rèn)的update()方法,頻繁使用圖形的應(yīng)用可能出現(xiàn)顯示閃爍現(xiàn)象。要避免在paint()調(diào)用之前的屏幕清除操作,只需按照如下方式覆蓋update()方法:


public void update(Graphics g) {
paint(g);
}



更理想的方案是:覆蓋update(),只重畫(huà)屏幕上發(fā)生變化的區(qū)域,如下所示:


public void update(Graphics g) {
g.clipRect(x, y, w, h);
paint(g);
}



3.5 延遲重畫(huà)操作

對(duì)于圖形用戶(hù)界面的應(yīng)用來(lái)說(shuō),性能低下的主要原因往往可以歸結(jié)為重畫(huà)屏幕的效率低下。當(dāng)用戶(hù)改變窗口大小或者滾動(dòng)一個(gè)窗口時(shí),這一點(diǎn)通?梢院苊黠@地觀(guān)察到。改變窗口大小或者滾動(dòng)屏幕之類(lèi)的操作導(dǎo)致重畫(huà)屏幕事件大量地、快速地生成,甚至超過(guò)了相關(guān)代碼的執(zhí)行速度。對(duì)付這個(gè)問(wèn)題最好的辦法是忽略所有“遲到”的事件。

建議在這里引入一個(gè)數(shù)毫秒的時(shí)差,即如果我們立即接收到了另一個(gè)重畫(huà)事件,可以停止處理當(dāng)前事件轉(zhuǎn)而處理最后一個(gè)收到的重畫(huà)事件;否則,我們繼續(xù)進(jìn)行當(dāng)前的重畫(huà)過(guò)程。

如果事件要啟動(dòng)一項(xiàng)耗時(shí)的工作,分離出一個(gè)工作線(xiàn)程是一種較好的處理方式;否則,一些部件可能被“凍結(jié)”,因?yàn)槊看沃荒芴幚硪粋(gè)事件。下面提供了一個(gè)事件處理的簡(jiǎn)單例子,但經(jīng)過(guò)擴(kuò)展后它可以用來(lái)控制工作線(xiàn)程。


public static void runOnce(String id, final long milliseconds) {
 synchronized(e_queue) { // e_queue: 所有事件的集合
 if (!e_queue.containsKey(id)) {
e_queue.put(token, new LastOne());
 }
}
final LastOne lastOne = (LastOne) e_queue.get(token);
final long time = System.currentTimeMillis(); // 獲得當(dāng)前時(shí)間
lastOne.time = time;
(new Thread() {public void run() {
 if (milliseconds > 0) {
 try {Thread.sleep(milliseconds);} // 暫停線(xiàn)程
 catch (Exception ex) {}
 }
 synchronized(lastOne.running) { // 等待上一事件結(jié)束
 if (lastOne.time != time) // 只處理最后一個(gè)事件
 return;
 }
}}).start();
}
private static Hashtable e_queue = new Hashtable();
private static class LastOne {
 public long time=0;
 public Object running = new Object();
}



3.6 使用雙緩沖區(qū)

在屏幕之外的緩沖區(qū)繪圖,完成后立即把整個(gè)圖形顯示出來(lái)。由于有兩個(gè)緩沖區(qū),所以程序可以來(lái)回切換。這樣,我們可以用一個(gè)低優(yōu)先級(jí)的線(xiàn)程負(fù)責(zé)畫(huà)圖,使得程序能夠利用空閑的CPU時(shí)間執(zhí)行其他任務(wù)。下面的偽代碼片斷示范了這種技術(shù)。


Graphics myGraphics;
Image myOffscreenImage = createImage(size().width, size().height);
Graphics offscreenGraphics = myOffscreenImage.getGraphics();
offscreenGraphics.drawImage(img, 50, 50, this);
myGraphics.drawImage(myOffscreenImage, 0, 0, this);



3.7 使用BufferedImage

Java JDK 1.2使用了一個(gè)軟顯示設(shè)備,使得文本在不同的平臺(tái)上看起來(lái)相似。為實(shí)現(xiàn)這個(gè)功能,Java必須直接處理構(gòu)成文字的像素。由于這種技術(shù)要在內(nèi)存中大量地進(jìn)行位復(fù)制操作,早期的JDK在使用這種技術(shù)時(shí)性能不佳。為解決這個(gè)問(wèn)題而提出的Java標(biāo)準(zhǔn)實(shí)現(xiàn)了一種新的圖形類(lèi)型,即BufferedImage。

BufferedImage子類(lèi)描述的圖形帶有一個(gè)可訪(fǎng)問(wèn)的圖形數(shù)據(jù)緩沖區(qū)。一個(gè)BufferedImage包含一個(gè)ColorModel和一組光柵圖形數(shù)據(jù)。這個(gè)類(lèi)一般使用RGB(紅、綠、藍(lán))顏色模型,但也可以處理灰度級(jí)圖形。它的構(gòu)造函數(shù)很簡(jiǎn)單,如下所示:


public BufferedImage (int width, int height, int imageType)



ImageType允許我們指定要緩沖的是什么類(lèi)型的圖形,比如5-位RGB、8-位RGB、灰度級(jí)等。

3.8 使用VolatileImage

許多硬件平臺(tái)和它們的操作系統(tǒng)都提供基本的硬件加速支持。例如,硬件加速一般提供矩形填充功能,和利用CPU完成同一任務(wù)相比,硬件加速的效率更高。由于硬件加速分離了一部分工作,允許多個(gè)工作流并發(fā)進(jìn)行,從而緩解了對(duì)CPU和系統(tǒng)總線(xiàn)的壓力,使得應(yīng)用能夠運(yùn)行得更快。利用VolatileImage可以創(chuàng)建硬件加速的圖形以及管理圖形的內(nèi)容。由于它直接利用低層平臺(tái)的能力,性能的改善程度主要取決于系統(tǒng)使用的圖形適配器。VolatileImage的內(nèi)容隨時(shí)可能丟失,也即它是“不穩(wěn)定的(volatile)”。因此,在使用圖形之前,最好檢查一下它的內(nèi)容是否丟失。VolatileImage有兩個(gè)能夠檢查內(nèi)容是否丟失的方法:


public abstract int validate(GraphicsConfiguration gc);
public abstract Boolean contentsLost();



每次從VolatileImage對(duì)象復(fù)制內(nèi)容或者寫(xiě)入VolatileImage時(shí),應(yīng)該調(diào)用validate()方法。contentsLost()方法告訴我們,自從最后一次validate()調(diào)用之后,圖形的內(nèi)容是否丟失。

雖然VolatileImage是一個(gè)抽象類(lèi),但不要從它這里派生子類(lèi)。VolatileImage應(yīng)該通過(guò)Component.createVolatileImage()或者GraphicsConfiguration.createCompatibleVolatileImage()方法創(chuàng)建。

3.9 使用Window Blitting

進(jìn)行滾動(dòng)操作時(shí),所有可見(jiàn)的內(nèi)容一般都要重畫(huà),從而導(dǎo)致大量不必要的重畫(huà)工作。許多操作系統(tǒng)的圖形子系統(tǒng),包括WIN32 GDI、MacOS和X/Windows,都支持Window Blitting技術(shù)。Window Blitting技術(shù)直接在屏幕緩沖區(qū)中把圖形移到新的位置,只重畫(huà)新出現(xiàn)的區(qū)域。要在Swing應(yīng)用中使用Window Blitting技術(shù),設(shè)置方法如下:


setScrollMode(int mode);



在大多數(shù)應(yīng)用中,使用這種技術(shù)能夠提高滾動(dòng)速度。只有在一種情形下,Window Blitting會(huì)導(dǎo)致性能降低,即應(yīng)用在后臺(tái)進(jìn)行滾動(dòng)操作。如果是用戶(hù)在滾動(dòng)一個(gè)應(yīng)用,那么它總是在前臺(tái),無(wú)需擔(dān)心任何負(fù)面影響。

四、補(bǔ)充資料

溫馨提示:喜歡本站的話(huà),請(qǐng)收藏一下本站!

本類(lèi)教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
欧美日韩精品福利| www.欧美精品一二三区| 日韩高清不卡在线| 日本亚洲不卡| 国产女人18毛片水真多18| 国产精品白丝jk黑袜喷水| www.色综合.com| 日本va欧美va精品发布| 欧美成人r级一区二区三区| 中文在线资源天堂| 国产清纯美女被跳蛋高潮一区二区久久w| 国产黑人绿帽在线第一区| 欧美激情第一页在线观看| 日韩欧美精品一区| 亚洲av无码专区在线| 成人教育av| 国产午夜精品麻豆| 日韩精品黄色网| 人人爽人人爽av| 欧美两根一起进3p做受视频| 亚洲精品影视| 国产男女无套免费网站| 中文字幕乱码一区| 成人激情春色网| 成年人免费av| 九九热在线视频观看| 日本午夜精品理论片a级app发布| 国产一区福利在线| 欧美激情黑白配| 久久亚洲资源| 久久在线免费| 国产一区二区影院| 啊灬啊灬啊灬啊灬高潮在线看| 精品国产1区2区| 日本精品视频网站| 国产精品免费小视频| 九色porny丨首页在线| 色综合久久综合| 中文字幕人妻一区二区在线视频| 午夜a一级毛片亚洲欧洲| 美腿丝袜一区二区三区| 国产精品一区二区果冻传媒| 极品白嫩少妇无套内谢| 中文字幕在线播放一区| 精品久久香蕉国产线看观看亚洲| 欧美高清视频在线高清观看mv色露露十八| 亚洲精品视频三区| 成人午夜电影在线观看| 国产高清视频在线| 国产农村妇女精品久久| 不用播放器的免费av| 亚洲已满18点击进入在线看片| 亚洲精品一区中文字幕电影| 亚洲欧美在线看| 国产精品狼人久久影院观看方式| 亚洲精品tv久久久久久久久久| 爱爱爱视频网站| 成人ar影院免费观看视频| 国产精品老牛影院在线观看| 麻豆精品久久精品色综合| 欧美群妇大交群的观看方式| 国产黄色在线网站| 国产三级免费观看| av官网在线播放| 女厕嘘嘘一区二区在线播放| 强制捆绑调教一区二区| 日韩欧美一二三四区| 美女精品导航| 亚洲日产国产精品| 少妇大叫太大太粗太爽了a片小说| 国产精品88a∨| 高潮一区二区三区| 日韩一区国产二区欧美三区| 欧美黄页在线免费观看| 首页欧美精品中文字幕| 少妇激情av一区二区三区| 久久影视中文字幕| 九九热精品视频国产| 强迫凌虐淫辱の牝奴在线观看| 国产精品入口福利| 国产亚洲精品久久777777| 欧美日韩精品国产| 激情av网站| 水蜜桃免费高清视频在线播放| 亚洲精品久久久| 欧美xxxx黑人又粗又长精品| 97精品国产97久久久久久免费| 美女被人操视频在线观看| 亚洲欧洲国产伦综合| 青青一区二区三区| 欧洲美女精品免费观看视频| aaa国产精品视频| 99久久免费观看| 三级精品视频| 人人干视频在线| 亚洲人成无码www久久久| 粉嫩欧美一区二区三区| 国产视频www| 国产色a在线| 国产免费一区二区三区免费视频| 欧美日韩欧美一区二区| 怡红院男人的天堂| 免费久久99精品国产自| 欧美伊人久久久久久久久影院| 国产男男gay体育生白袜| 日韩电影中文字幕在线观看| 人与动物性xxxx| 韩国女主播成人在线观看| 亚洲 欧美 国产 另类| av在线com| 韩国一区二区在线观看| 日本午夜精品理论片a级app发布| 亚洲国产精品嫩草影院| 先锋影音男人| 91黄色免费版| 日产精品久久久久久久蜜臀| 性色av一区二区三区红粉影视| 日韩欧美在线字幕| 国产精华一区二区三区| 国产日产亚洲精品系列| 国产私拍一区| 欧美在线亚洲在线| 国产精品怡红院| 日本一本草久在线中文| 亚洲一二三四五六区| 日韩欧美一区二区免费| 中午字幕在线观看| 首页欧美精品中文字幕| 亚洲网色网站| 亚洲国产成人av好男人在线观看| 成人久久久久久久久| 国产精品国产精品国产专区不片| 亚洲精品高清在线| 成人免费毛片视频| 国产精久久久久久| 天天射,天天干| 免费吸乳羞羞网站视频| 色先锋资源久久综合| 成人春色激情网| 久9久9色综合| 性xxxx视频播放免费| 貂蝉被到爽流白浆在线观看| 色综合999| 玖玖玖国产精品| 天天舔天天干天天操| 国产校园另类小说区| 久久久久久久亚洲| 国产美女精品视频免费播放软件| 91九色国产在线播放| 97视频在线观看免费高清完整版在线观看| 国产哺乳奶水91在线播放| 小小女视频网站色琼网站| 久久五月天小说| а√在线中文在线新版| 色婷婷久久综合| 欧美另类videos死尸| 久久亚区不卡日本| √天堂8资源中文在线| 欧美片第1页| 国产精品一区二区久激情瑜伽| 偷拍亚洲欧洲综合| 青青草视频在线免费直播| 伊人久久综合| 久久精品国产亚洲av麻豆| 精品蜜桃在线看| 色综合电影网| 中国黄色片一级| 中文字幕久热精品视频免费| 亚洲精品国产无天堂网2021| 欧美一区二区三区在线看| 777琪琪电影午夜理伦片| 波多野结衣黄色| 狠狠色2019综合网| h在线观看视频免费网站| yourporn久久国产精品| 日本人妖在线| 欧美α欧美αv大片| 高清国产一区二区三区| 自拍偷拍亚洲精品| 国产精品极品尤物在线观看| 亚洲国产成人久久综合一区| 欧美中文字幕| 国产在线精品一区二区三区》| 妞干网这里只有精品| 日韩精品第一区| 国产精品乡下勾搭老头1| 丰满肉肉bbwwbbww| 亚洲va欧美va天堂v国产综合| 一本到不卡免费一区二区| 亚洲日本成人在线观看| 精品处破女学生| 日韩免费观看在线观看| 免费人成在线观看视频播放| 久久久久久久久97黄色工厂| 欧洲日韩成人av| 国产精品日韩在线| 久久香蕉网站| 亚洲国产一区二区三区在线观看| 亚洲欧美一区二区精品久久久| 国产日本欧美一区| 凹凸成人在线| 日韩欧美在线中文字幕| 欧美亚洲国产一区在线观看网站| 国产免费中文字幕| 成人涩涩小片视频日本| 91青青草免费观看| 欧美成人综合在线| 国产女优一区| 亚洲全黄一级网站| 羞羞视频网站在线观看| 国产精品99久久99久久久二8| 亚洲欧美色图视频| 岛国中文字幕| 欧美xxxx日本和非洲| 福利视频导航网| 日韩手机在线观看| 久久av资源站| 中文字幕影音在线| 亚洲一区色图| 成人美女在线视频| 欧美成人午夜电影| 国产高中女学生第一次| 天堂社区日本电影超碰| 三级视频在线播放| 五月开心六月丁香综合色啪| 国产精品女主播| 91影院在线免费观看| 成人免费在线视频播放| 在线中文字幕日韩| 少妇精品久久久一区二区三区| 麻豆av一区| 精精国产xxxx视频在线动漫| 成人日韩av在线| 欧美日韩国产综合视频| 国产一区二区三区四区三区四| 欧美精品粉嫩高潮一区二区| 69堂免费精品视频在线播放| 羞羞视频在线免费国产| 亚洲大片免费观看| 一二三四视频在线社区中文字幕2| 91视频一区| 国产婷婷色一区二区三区在线| 亚洲国产精品久久艾草纯爱| 成人性生交大片免费看视频直播| 色先锋影音岛国av资源| 俺来也官网欧美久久精品| 国产手机在线视频| 另类中文字幕网| 成年女人a毛片免费视频| 日韩欧美国产黄色| 91精品国产自产在线观看永久∴| 国内精品视频一区| 精品久久成人| 国产精品一久久香蕉国产线看观看| 美女脱光衣服与内衣内裤一区二区三区四区| 久久国产精品99久久久久久丝袜| 女人被狂躁到高潮的免费| 久久99国产精品| 亚洲成人综合网站| 国产日韩欧美中文字幕| 91视频 - 88av| 欧美成人三级| 国产a视频精品免费观看| 国产精品久久久久天堂| 无遮挡爽大片在线观看视频| 欧美一级免费大片| 国产天堂在线播放视频| 国产色产综合产在线视频| 亚洲一区二区三区激情| 久久久九九九九| 日本二区在线观看| 成人超碰在线| 夜夜嗨网站十八久久| 91亚洲国产成人精品性色| 最新av中文字幕| 玖草视频在线观看| 中文字幕一二三四区| 欧美日韩在线视频播放| 男女做暖暖视频| 精品乱码一区二区三区四区| 久久伊人色综合| 国产区精品区| 6080国产精品| 久久久久久国产精品| 国产日韩欧美中文在线播放| 亚洲高清无码久久| 亚洲精选免费视频| 一本久道久久综合无码中文| 国产综合成人久久大片91| 蓝色福利精品导航| 成人av免费电影网站| 中文字幕不卡在线| 国产精品毛片久久久久久久久久99999999| 亚洲国产一区二区三区四区| 蜜桃av在线播放| 国产精品腿扒开做爽爽爽挤奶网站| 国产成人av片| 欧美三级电影网址| av资源在线看片| 中日韩视频在线观看| 日韩在线观看视频免费| 美女高潮在线观看| 国产精品无码一区二区三| 中文字幕21页在线看| 久久九九国产精品怡红院| 亚洲精品视频一区| 日韩亚洲一区二区| 老女人性生活视频| 日日夜夜精品一区| 国产麻豆视频在线观看| 色999韩欧美国产综合俺来也| 日本午夜精品理论片a级appf发布| 欧美一区二区三区播放老司机| 欧美精品资源| 亚洲欧洲一区二区天堂久久| 宅男噜噜噜66一区二区66| 在线播放黄色网址| 精品人妻一区二区三区日产| 在线播放evaelfie极品| 国产精品无码一区二区三| 久久超级碰视频| 中文字幕日韩欧美在线| 久久精品国产久精国产| 久久久久久国产免费| 色涩成人影视在线播放| 亚洲欧洲中文日韩久久av乱码| 日韩免费中文字幕| 成人黄色av免费在线观看|