国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JAR進(jìn)階(下)

2019-11-18 15:46:27
字體:
供稿:網(wǎng)友

  從上一篇看到的JAR的基本用法,似乎并沒讓人有感覺到JAR的出現(xiàn)是給applet的應(yīng)用帶來了一個(gè)新的開始。但您也許看完了下面的,就會(huì)對(duì)JAR稍有認(rèn)同了。

  很多試著在jbuilder里做過applet的java愛好者都知道,applet的界面布局是一個(gè)比較繁人的問題,遠(yuǎn)不是如VB里面把控件放到界面上那么簡(jiǎn)單,就算是用最"高級(jí)"的grid bag布局治理器,要在上面擺多個(gè)控件也是需要調(diào)整又調(diào)整的,而且就算是在jbuilder里面還看得可以接受,但換到瀏覽器里面也許又是另一個(gè)樣子了,當(dāng)然也有擺得好的,當(dāng)究竟是需要時(shí)間和經(jīng)驗(yàn)的,可是在jbuilder里面假如對(duì)底板不選grid bag布局治理器,而選XY布局,那在上面擺控件就真的是一件很輕松的事情了,令人遺憾的是XY布局所調(diào)用的類是com.borland.jbcl.layout下面的,是由borland公司自己編寫的,很顯然這樣編寫的applet是輕松了編寫,痛苦了應(yīng)用,因?yàn)閷?shí)在是無法讓僅僅認(rèn)得jdk1.0的IE去熟悉borland寫的類,那么就真的只有寫給自己看了嗎,現(xiàn)在有了JAR,你會(huì)發(fā)現(xiàn)如按下面的步驟來,是可以很輕松的讓別人也看到你寫的包含非jdk標(biāo)準(zhǔn)類的applet。

  我們?cè)诘谝徊綄懙哪墙缑嫔显偬砑訋讉€(gè)按鈕,先把底板的布局由grid bag改變成xy,再在上面添加幾個(gè)按鈕,把按鈕的右擊事件也設(shè)置為彈出菜單,以下是源程序,在jbuilder生成的代碼上簡(jiǎn)化一下,去掉暫可不用的代碼和一些注釋,但保證可以正常運(yùn)行,

package test1;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import com.borland.jbcl.layout.*;

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();
XYLayout xYLayout1 = new XYLayout();/*面板改變?yōu)閄YLayout布局,使用的是非jdk標(biāo)準(zhǔn)類*/
Button button2 = new Button();
Button button3 = new Button();/*添加三個(gè)按鈕*/
public void init() {
menuItem1.setLabel("1");
menuItem2.setLabel("2");
menuItem3.setLabel("3");
button1.setLabel("button1");
button1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePRessed(MouseEvent e) {
button1_mousePressed(e);
}
});
this.setLayout(xYLayout1);
button2.setLabel("button2");
button2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(MouseEvent e) {
button1_mousePressed(e);
}
});
button3.setLabel("button3");
button3.addMouseListener(new java.awt.event.MouseAdapter() {/*三個(gè)按鈕的右鍵事件都為一個(gè)*/
public void mousePressed(MouseEvent e) {
button1_mousePressed(e);
}
});
popupMenu1.add(menuItem1);
popupMenu1.add(menuItem2);
popupMenu1.add(menuItem3);
this.add(button1, new XYConstraints(155, 5, -1, -1));
add(popupMenu1);
this.add(button2, new XYConstraints(49, 94, 101, 32));
this.add(button3, new XYConstraints(235, 92, 98, 36));
}
void button1_mousePressed(MouseEvent e) {
int mods=e.getModifiers();
if((mods&InputEvent.BUTTON3_MASK)!=0)
{
popupMenu1.show(button1,e.getX(),e.getY());
}
}
}

  通過在jbuilder的預(yù)覽中可以看到,三個(gè)按鈕未改動(dòng)位置,而且右鍵單擊也按要求在一個(gè)按鈕上出現(xiàn)。很可惜的是這樣的applet無法發(fā)布出來,我們?cè)囍蜷_class目錄下的Applet1.Html,IE報(bào)出一個(gè)出錯(cuò)信息:"load:test1.Applet1 cant't be instantiated"。原因就是IE并不熟悉com.borland.jbcl.layout下面的類,而這里使用了XYLayout。.那么我們開始制作包含該XYLayout類的JAR來發(fā)布該applet。

  還是通過new一個(gè) Archive Builder開始,

  Archive type : Applet

  Project classes and resources : Include required classes and known resources

  Required classes and resources : add test1.Applet1.class

  再點(diǎn)擊next,就到了要害的一步,顯示的JBCL和DataEXPress都是applet所需要調(diào)用到的類,而且都是非jdk標(biāo)準(zhǔn)的,可以通過在這里選擇后也包含到這個(gè)JAR文件中,供applet調(diào)用,默認(rèn)的設(shè)定是Include required classes and all resources,即把a(bǔ)pplet所需要調(diào)用的類包含到JAR中,并且還包括這個(gè)類所中所包含的所有資源,而不管applet是否會(huì)用到。所以我們一般情況下只需要選擇include required classes and known resources,資源文件要盡量少的包含到JAR中,以避免JAR文件過于龐大。記住是要讓JBCL和DataExpress都選擇為Include Deps。這樣便很輕松的完成了相關(guān)類的添加工作。

  完成后可以在test1.jpr的目錄數(shù)下找到Applet,builder它得到的test1.jar目錄數(shù)中可以看到多出了com.borland.jbcl.layout這樣的目錄,在這個(gè)目錄下包含著XYLayout.class和XYConstraints.class兩個(gè)類文件,這就是這個(gè)applet所需要調(diào)用的非標(biāo)準(zhǔn)類了,還是要記住,每當(dāng)重新編譯了這個(gè)applet,都要再編譯一次JAR,這樣才能讓新生成的applet文件包含到JAR中。

  接下來就只需要在有test1.jar這個(gè)文件的目錄里面新建一個(gè)文件testjar.html :

  <applet code=test1.Applet1.class archive="test1.jar" width=350 height=200 > </applet>

  需要提醒的是,假如在IE里面瀏覽該html,假如有過重新編譯JAR并要把變化反應(yīng)到網(wǎng)頁上來,又沒有關(guān)閉先前開的瀏覽該html的IE窗口,就要在地址欄里面按Ctrl+F5來刷新該html。

  可以看到這樣的應(yīng)用真的給applet賦予了更強(qiáng)大的生命力,而且在jbuilder里面很輕易的就實(shí)現(xiàn)了它。但是就applet的應(yīng)用來講,還是有個(gè)懸而未決的問題,很多朋友都知道,在applet里面不能添加進(jìn)swing類,因?yàn)镮E只是支持jdk1.0,而swing類是以 jdk1.1 輕型用戶界面框架為基礎(chǔ)的,不在IE的支持范圍,那么自然也不能正常顯示,現(xiàn)在問題是也不能用Jbuilder的Archive Builder來把a(bǔ)pplet所需要調(diào)用的swing類包含到JAR中。

  但也不是沒有辦法,一個(gè)較為簡(jiǎn)單的辦法是裝jre(Java Runtime Environment ),但是這個(gè)辦法的缺點(diǎn)是要讓每一個(gè)要瀏覽該applet的機(jī)器都要安裝jre。另一個(gè)辦法是重新復(fù)制編譯一次swing類,生成自己的類,這樣就可以被JAR打包時(shí)所包含到了,當(dāng)然這需要的較多的時(shí)間和精力,這里舉一個(gè)較為簡(jiǎn)單的例子,假如在applet里使用Jbutton,那么先把jdk里面一個(gè)src.jar這個(gè)文件解壓,再在目錄javax,swing下,找到Jbutton.java文件,查看它的源碼,并把所有涉及到的swing類都復(fù)制到一個(gè)目錄下,改變每一個(gè)文件的package屬性。再編譯,通過了就說明找到的文件全了,沒有通過就必須再找到,直到不再編譯出錯(cuò)為止。最后從applet引用這個(gè)已經(jīng)編譯的class,而不再用swing。似乎這個(gè)辦法是笨了點(diǎn),但對(duì)大家熟悉java是很有幫助的。

  差不多JAR的用法可以說把握到這樣就可以了,當(dāng)然還有更出色的應(yīng)用,如與數(shù)字簽名結(jié)合可以突破以往對(duì)applet的限制,甚至可以訪問本地硬盤,網(wǎng)絡(luò)等等。假如大家對(duì)此感愛好,我也會(huì)在稍后的文章中對(duì)數(shù)字簽名和JAR的結(jié)合跟大家作一個(gè)較為詳盡的探討。進(jìn)入討論組討論。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 同仁县| 鹤山市| 梨树县| 新乐市| 石渠县| 库伦旗| 启东市| 赣榆县| 施秉县| 子长县| 乐东| 吴川市| 镇赉县| 玉龙| 怀宁县| 台州市| 洱源县| 奉化市| 温州市| 浑源县| 上思县| 桃园县| 屏山县| 南郑县| 云南省| 富源县| 齐河县| 曲松县| 临城县| 富平县| 崇州市| 秀山| 新乐市| 鲁山县| 永丰县| 梁河县| 莲花县| 嘉荫县| 扬中市| 泰安市| 武隆县|