JAR進階(上)
先對JAR作一下簡要介紹,JAR是一種與平臺無關的文檔格式,全稱為Java Archive,翻譯成中文叫Java 歸檔,咋一看,它相當于一種壓縮格式,可以把眾多的文檔合成一個文件,就象ZIP,ACE等,但它所被賦予的能力遠不止這些,
首先,它與平臺無關,并且兼容性好,就是說不管是windows,還是unix,都是通吃,甚至是IE和netscape之間的不兼容,也能輕松化解,這和java的精神是很相符合的。
再來,它使用戶可將多個java小應用程序合并為一個文件作為單個的簡單 HTTP事務下載到瀏覽器中,從而大大提高瀏覽速度,這在越來越講究速度的www世界里是很相當具有誘惑力的。
它還提供對applet作者的認證,這只要對JAR進行數字簽名便可。
更為精彩的是,如果瀏覽器信任該認證,那么作為可信任的applet,它便能訪問非信任的applet禁止訪問的資源,如本地硬盤和網絡。
還有一個不似功能的優點,背靠sun,自然是好事天天有。
總而言之是優點多多,前途無量,從它的誕生開始,它就在java的應用中的占著越來越重要的地位,不久JAR將成為分布java applet的標準方法。
這么好的東東,是不是有些相見恨晚,那現在便開始為JAR的進階準備一些工具,當然必要的是jdk,現在普遍用的版本是1.3,那么就去下一個吧,sun的主機太遠,速度也一般般,關鍵是e文的,目錄又深。國內有些網站也提供下載的,速度也挺快,在搜索引擎里面查找一下便有一堆了。最好是準備一個可視化的java編程環境,在windows平臺下推薦jbuilder4,Inprise也就borland公司出的,除開資源占得厲害,有些垃圾代碼,也挺不錯的。至于jbuilder4的下載,也還是去搜索一下吧,還有要對jbuilder熟悉一下,www.94soft.com里面有jbuilder書籍下載,有興趣就去下一個看看,挺不錯的。
現在開始JAR的第一步,jdk提供了jar的工具,就在java所在目錄的bin目錄下有一個jar.exe的應用程序,可以試著新建一個jar文件:
jar cvf test1.jar *.class image
c參數表示在標準輸出上創建新歸檔或空歸檔,
v參數表示把添加了一些什么的信息在標準輸出上顯示,
f 參數在這里表示用什么樣的jar文件名,
在jbuilder里面新建一個JAR更加方便,wizards菜單的archive builder一步步往下選就可以了。
為了更好的鉆研JAR,就從在jbuilder做個applet開始吧,做這樣一個東西,在一個面板上有一個按鈕,右鍵單擊按鈕將彈出一個菜單。
新建一個工程test1.jpr
再新建一個applet applet1.Java
接下來在面板上擺上一個java.awt.button,
再擺上一個java.awt.popupMenu,在popupMenu的編輯面板輸入幾個選項。
這樣控件擺完了,接下來是寫相應的事件,源程序如下:
package test1; import java.awt.*; import java.awt.event.*; import java.applet.*; public class Applet1 extends Applet { boolean isStandalone = false; PopupMenu popupMenu1 = new PopupMenu(); MenuItem menuItem1 = new MenuItem(); MenuItem menuItem2 = new MenuItem(); MenuItem menuItem3 = new MenuItem(); Button button1 = new Button(); /**Get a parameter value*/ public String getParameter(String key, String def) { return isStandalone ? System.getProperty(key, def) : (getParameter(key) != null ? getParameter(key) : def); } /**Construct the applet*/ public Applet1() { } /**Initialize the applet*/ public void init() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } /**Component initialization*/ private void jbInit() throws Exception { menuItem1.setLabel("1"); menuItem2.setLabel("2"); menuItem3.setLabel("3"); button1.setLabel("button1"); file://這是button1的監聽事件, button1.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) { button1_mousePressed(e); } }); popupMenu1.add(menuItem1); popupMenu1.add(menuItem2); popupMenu1.add(menuItem3); this.add(button1, null); add(popupMenu1); } |
運行一下,確實可以看到右鍵彈出了相應的菜單。
我們現在可以打包并發布了.
選擇wizards菜單的archive builder,或者通過new 的archive builder來可視化的創建一個包含這個applet的JAR文件。
需要注意的幾點是,
1.archive type 選applet,這個選項并不重要,只是相當于通知一下接下來做的是一個applet的JAR文件包
2.project class and resources選include required class and known resources ,這句理解為待會兒生成的JAR文件包中包含被調用的類文件和需要使用到資源文件。
3.required classes and resources 需添加test1的applet1,新建的JAR文件包默認情況下并不包含所應用到的applet的class文件,需要在這里進行添加,有多少要用到的applet,就應該在這里都添加進去
完成后會發現多出來一個applet的圖標,在build后會在其下面多出來一個test1.jar,在JAR的屬性欄里是一樣可以添加和刪除applet的class文件的,只是記得每次重新編譯了class文件后都要rebuild這個JAR文件,這是為了讓JAR文件中的class也得到及時更新。
雙擊test1.jar會發現有兩個class文件,Applet1.class和Applet1$1.class,后者是用來存放鼠標監聽,右鍵點擊事件的中間代碼的。
現在只是需要把它發布到瀏覽器上就可以了。
在test1目錄下新建applet1.html文件,內容很簡單:
<APPLET code=test1.Applet1.class archive="test1.jar"></APPLET>
相比之下,要選擇發布這樣的class文件,就必須把Applet1.class和Applet1$1.classl兩個文件同時放到一個目錄下面,兩個文件還可以這樣照顧的了,但一旦class文件數量增多了,就會難免會出現個別文件丟失的情況,使applet的應用產生錯誤。
打包成JAR也使整個applet成為一個事務就可以下載過來,因此也減少了網絡開銷,加快了下載的速度。由此可見,JAR文件格式的出現確實讓applet的應用進入了一個新的可持續發展的階段。