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