1. 引言?
??? JAVA是開(kāi)發(fā)服務(wù)器,個(gè)人應(yīng)用,移動(dòng)設(shè)備的極好的技術(shù)。因?yàn)?a class="innerlink" href="http://ihrv.cn/tags/跨平臺(tái)" title="跨平臺(tái)" target="_blank">跨平臺(tái)的需要使得JAVA在服務(wù)器和移動(dòng)設(shè)備方面非常成功?,F(xiàn)在雖然在個(gè)人電腦方面還不是很令人滿意,但JAVA正在以比你想像還快的速度改進(jìn)著。在這篇論文中,我將分析JAVA將怎樣改變現(xiàn)在的桌面世界,然后展示用標(biāo)準(zhǔn)J2SE構(gòu)建的全功能看圖軟件。
.桌面系統(tǒng)和JAVA?
??? 現(xiàn)在主流的桌面平臺(tái)是:Windows,Mac和Linux。它們都不是完美的。Windows統(tǒng)治著桌面市場(chǎng),有著大量的應(yīng)用軟件和開(kāi)發(fā)者,但很多要花錢,并且存在安全漏洞;Linux有著安全基礎(chǔ),并且是開(kāi)源的,但沒(méi)有Windows用起來(lái)那么順手;Mac非常好用,也不是像Windows那樣成為黑客攻擊的對(duì)象,但其硬件、軟件的選擇比Windows和Linux要受限制的多。公司和個(gè)人選擇操作系統(tǒng)是要考慮很多因素的:盡量低的價(jià)格,盡量高的安全性占第一位,這讓很多人轉(zhuǎn)向了Linux(比如中國(guó)的軍用平臺(tái)就只能用Linux)。友好的使用環(huán)境,大量的應(yīng)用軟件使得Windows仍然占用很大的市場(chǎng)份額。Mac有著忠實(shí)的用戶。日益健壯的Linux市場(chǎng),還有Mac的中興使得它們都大力運(yùn)用JAVA技術(shù),以便成為更加重要得桌面系統(tǒng)。
.跨平臺(tái)支持?
??? JAVA能在所以相關(guān)平臺(tái)上運(yùn)行,如果哪個(gè)組織想不改變軟件的現(xiàn)有代碼就能跨平臺(tái)使用,那么JAVA就是最好得桌面開(kāi)發(fā)平臺(tái)。也許用Microsoft得可視化開(kāi)發(fā)工具創(chuàng)建.NET程序很輕松,但這會(huì)使你局限于Windows平臺(tái)。如果你用JAVA開(kāi)發(fā)應(yīng)用程序,你不會(huì)因?yàn)榇a重構(gòu)引起麻煩。JAVA的GUI能夠在各種平臺(tái)上看起來(lái)一樣,也能根據(jù)需要模擬平臺(tái)樣式。JAVA的安全性也是有目共睹的,這省去了不少后期維護(hù)工作。Sun公司桌面系統(tǒng)的推出,JDK1.5的升級(jí),這給了廣大的JAVA開(kāi)發(fā)者一個(gè)很好的機(jī)遇和挑戰(zhàn)。隨著JAVA技術(shù)的不斷成熟和多種IDE軟件的出現(xiàn),開(kāi)發(fā)出的JAVA應(yīng)用軟件會(huì)更友好,開(kāi)發(fā)周期也會(huì)更短,維護(hù)也更為方便。
.成功典范?
????Borland公司的JBuilder開(kāi)發(fā)環(huán)境;NetBean組織的NetBean,以及IBM公司的Ecllipse。這些都是大型的桌面開(kāi)發(fā)軟件,還有很多跟廣大計(jì)算機(jī)用戶密切相關(guān)的軟件,如永中Office,JFtp,Robocode,JLGui等等。
2. 實(shí)例分析?
.項(xiàng)目描述?
???“中國(guó)眼” 是北信JAVA實(shí)驗(yàn)室用純JAVA語(yǔ)言寫成的、成功的看圖軟件。它運(yùn)用了JAVA天然的跨平臺(tái)特性;融合了XML,多線程,css,javascript等多種技術(shù);支持BMP,XMP,JPG,JPEG,GIF,PNG,PCX。并且有很強(qiáng)的安全性和穩(wěn)健性。軟件只有400多K,很方便在網(wǎng)上傳輸。運(yùn)行環(huán)境為J2SE1.4以上。軟件已經(jīng)在Windows 98,2000,XP,2003,Linux RedHat9 通過(guò)了測(cè)試。
??? 它具有看圖,圖片處理,格式轉(zhuǎn)換,文件管理等多種功能。能幻燈片放映,圖像渲染(柔化,銳化,亮化,暗化,浮雕化等),以極快速度縮放,重命名,屏幕取色,圖像翻轉(zhuǎn),圖像裁剪,創(chuàng)建"我的相冊(cè)簿",全屏看圖,支持鼠標(biāo)拖拽裝入圖片。
?? 說(shuō)到圖像處理,也許有人會(huì)想到用JAI(Java Advanced Imaging),但這會(huì)使得那些沒(méi)有安裝這個(gè)包的人很被動(dòng),而且這個(gè)包處于β版,性能不穩(wěn)定,所以在該軟件中沒(méi)有用JAI。
?? “中國(guó)眼”的圖像處理速度,它的小巧,它的強(qiáng)大功能會(huì)給用戶留下深刻映象。并且它是免費(fèi)的。
圖一:“中國(guó)眼”的系統(tǒng)層次
??? 對(duì)于Swing主件的繪圖設(shè)置,最好用paintComponent,這樣能夠用缺省的雙緩沖機(jī)制。
圖二:“中國(guó)眼”的圖形顯示
??? 看圖軟件要是沒(méi)有幻燈片放映會(huì)很遜色的,而JAVA幻燈片放映的實(shí)現(xiàn)是離不開(kāi)線程的,不過(guò)線程的開(kāi)始停止用那些supend,或者是stop 是不安全的,所以在run里面用循環(huán)變量來(lái)控制是比較好的選擇,下面是SlideShow:
public class slideshow extends Thread{?
public void run(){?? ??
while(slideshowbegin==true)
?????????? try{ cycleloadImage(KeyEvent.VK_SPACE);
??????????? ??????? if(slideshowbegin==false) break;
??? ??????????????? Thread.sleep(2000);//停止2000ms}
??????????? catch(InterruptedException e) {System.out.println(e.toString());}
}}
??? 對(duì)圖像文件的處理少不了要存儲(chǔ)一些圖像信息,比如說(shuō)你要?jiǎng)?chuàng)建個(gè)人相冊(cè)簿,那么少不了對(duì)圖像發(fā)生年代、背景的記述。Java于XML的結(jié)合使得這樣的這變得很容易處理。
public static Document createDomDocument(String imagepath,String description)
{?? Document doc=parseXmlFile()
Element element; //加入根節(jié)點(diǎn)元素
if(doc.hasChildNodes()){element=doc.ge tDocumentElement();}
else{
element = doc.createElement("Description");
doc.appendChild(element);
Comment comment = doc.createComment("以下是各個(gè)圖像的描述信息");
//對(duì)元素節(jié)點(diǎn)插入comment
doc.insertBefore(comment, element);
}
String xpath = "http://*[@path='"+imagepath+"']";
try{? // 得到匹配的元素
NodeList nodelist = org.apache.xpath.XPathAPI.selectNodeList(doc, xpath);
//處理節(jié)點(diǎn)表中的元素
if(nodelist.getLength()!=0)element.removeChild((Element)nodelist.item(0));
}
catch(javax.xml.transform.TransformerExceptione){System.out.println(e.toString());}
Element imageinfo=doc.createElement("ImageInfo");//創(chuàng)建元素節(jié)點(diǎn)
element.appendChild(imageinfo);
imageinfo.setAttribute("path",imagepath);//設(shè)置元素屬性,用圖像路徑來(lái)表示
imageinfo.appendChild(doc.createTextNode(description));
return doc;
}
sun.awt.shell.ShellFolder sf= sun.awt.shell.ShellFolder.getShellFolder(file);
ImageIcon icon= new ImageIcon(sf.getIcon(true), sf.getFolderType());
得到文件的系統(tǒng)圖標(biāo),這樣就不會(huì)使人們?cè)诓煌脚_(tái)下使用本軟件時(shí)感到陌生,這也是Java L&F的最好表達(dá)。
圖三:圖形的通用界面????????????????????? 圖四:圖形的柔化
??? 對(duì)應(yīng)每種圖像處理建立不同的處理類,都放在ImageProcess包下。圖形的柔化處理用了JAVA內(nèi)建的卷積類:
//一個(gè)圖像柔化就是把每一個(gè)象素和它周圍的8個(gè)象素平均
float weight = 1.0f/9.0f;
float[] elements = new float[9];
for (int i = 0; i < 9; i++)elements[i] = weight;
Kernel kernel = new Kernel(3, 3,elements);
BufferedImageOp op = new ConvolveOp(kernel);
3.總結(jié)和展望?
JAVA初衷是為在瀏覽器上運(yùn)行APPLET而創(chuàng)建的網(wǎng)絡(luò)技術(shù),但它通用有能力在桌面系統(tǒng)運(yùn)行的非常好,就那“中國(guó)眼”看圖軟件來(lái)說(shuō),經(jīng)過(guò)測(cè)試,縮放同樣的圖像,花費(fèi)的時(shí)間比ACDSee,以及IrfanView快的多,穩(wěn)定性好。不要忘了它還有最大的優(yōu)勢(shì)就是跨平臺(tái)的。這也是“Write Once, Run Anywhere”的最好應(yīng)證。
參考文獻(xiàn):
[1] java.sun.com
[2] http://www.onjava.com/pub/a/onjava
[3] http://community.java.net/javadesktop
[4] http://www-106.ibm.com/developerworks/java/
[5] Philip Brow? www.bolthole.com? n
[6] Matthias ?www.burgsoft.de