先對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);
}
/**Get Applet information*/
public String getAppletInfo() {
return "Applet Information";
}
/**Get parameter info*/
public String[][] getParameterInfo() {
return null;
}
void button1_mousePressed(MouseEvent e) {
/*通過InputEvent.BUTTON3_MASK對右鍵的判斷
要判斷是左鍵用InputEvent.BUTTON1_MASK,
*/
int mods=e.getModifiers();
if((mods&InputEvent.BUTTON3_MASK)!=0)
{
popupMenu1.show(button1,e.getX(),e.getY());
button
}
}
}
file://applet1.java is over
運行一下,確實可以看到右鍵彈出了相應的菜單。
我們現在可以打包並發布了.
選擇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的應用進入了一個新的可持續發展的階段。