<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    使用腳本文件(jnlp)來發(fā)布Java程序

    本文為原創(chuàng),如需轉(zhuǎn)載,請注明作者和出處,謝謝!

        發(fā)布Java程序(桌面程序)最直接的方法就是將jar文件打包交給用戶。不過有時jar文件很多,也很大。為了方便,sun提供了另外一種方式來通過網(wǎng)絡(luò)發(fā)布Java程序。這就是jnlp文件。可能很多讀者曾經(jīng)下載過很多jnlp文件,運行后會自動從指定的網(wǎng)站下載相應(yīng)的文件。
        實際上,jnlp文件就是一個xml格式的腳本文件。假設(shè)我們有一個test.jar文件需要安裝(該文件是一個基于SWT的桌面程序),那么要使用jnlp文件發(fā)布test.jar需要如下幾步:

    一、為test.jar文件簽名
        從網(wǎng)絡(luò)上下載就意味著風險大大增加,因此,要想通過jnlp從網(wǎng)絡(luò)上下載jar文件,并運行,就需要對該文件進行簽名。如果不簽名,java程序?qū)⑦\行在sandbox中,也就是說無法訪問本地資源,由于test.jar是swt程序,需要訪問本地的dll(windows)或.so(linux)庫,所以必須要對test.jar進行文件簽名。
        簽名需要一個證書,如果沒有證書,可以使用如下的命令生成一個證書

    keytool -genkey -alias nokiaguy -validity 12345 -keypass nokiaguypass -storepass nokiaguypass
    -keystore nokiaguy.keystore -dname "CN=nokiaguy, OU=nokiaguy, O=D, L=CA, S=CA, C=CN"

        在執(zhí)行上面的命令后,會在當前目錄下生成一個nokiaguy.keystore文件。然后將test.jar復制到當前目錄下。現(xiàn)在當前目錄有兩個文件:nokiaguy.keystore和test.jar。最后使用如下的命令對test.jar簽名:

    jarsigner -keystore nokiaguy.keystore -storepass nokiaguypass -keypass nokiaguypass test.jar nokiaguy

        在執(zhí)行完上面的命令后,我們會發(fā)現(xiàn)test.jar文件的尺寸變大了。

    二、建立虛擬目錄

        下面就是在自己的機器上或服務(wù)器建立一個可訪問的虛擬目錄。本文使用了IIS建立一個虛擬目錄,可通過http://200.200.200.200/key訪問該目錄,在該目錄下只有一個test.jar文件(經(jīng)過簽名后的jar文件)。

    三、編寫jnlp文件
        在任意目錄下建立一個test.jnlp文件,并輸入如下內(nèi)容:

    <?xml version="1.0" encoding="utf-8"?>
    <jnlp  spec="1.0+" codebase="http://200.200.200.200/key">
       
    <information>
           
    <title>CustomSWT</title>
           
    <vendor>nokiaguy.blogjava.net</vendor
           
    <homepage href="index.html"/>
       
    </information>
       
    <security>
           
    <all-permissions/> 
       
    </security>
       
    <resources>
           
    <j2se version="1.6.0"/>
           
    <jar href="test.jar"/>
       
    </resources>
        <application-desc main-class="CustomMain"/>
    </jnlp>


        其中<jnlp>根元素通過codebase指定了虛擬目錄的url。通過<jar>元素指定了要下載的test.jar文件。如果存在多個jar文件,可以有多個<jar>元素。<jar>元素的href屬性指定要下載的jar文件,該文件路徑是相對于codebase屬性值的。如果要考慮不同的操作系統(tǒng),可以將多個<resources>元素,如下面的代碼所示:
        <resources os="Windows">
            
    <jar href="win32/swt.jar"/>
            
    <nativelib href="win32/swt-native-lib-win32.jar"/>
        
    </resources>
        
    <resources os="Linux">
            
    <jar href="linux/swt.jar"/>
            
    <jar href="linux/swt-pi.jar"/>
            
    <nativelib href="linux/swt-native-lib-linux.jar"/>
        
    </resources>

        要注意,必須使課堂<application-desc>元素指定要運行的主窗口的類名(帶包名),由于本文使用的test.jar文件中主窗口類沒有名,類名為CustomMain,因此,只main-class屬性值為CustomMain。

        運行test.jnlp,一開始會顯示如圖1所示的歡迎界面。

    圖1
        然后會出現(xiàn)如圖2所示的界面。
    圖2
        不過讀者不要擔心,這不是錯誤,而是說我們使用的證書并不是Sun支持的(而是我們自己生成的),因此,會出現(xiàn)這個證書提示(如果使用Sun支持的證書就不會出現(xiàn)這個異常,但要花錢的哦!)。選中“始終信任此發(fā)行者的內(nèi)容”復選框,單擊“運行”按鈕,就會下載test.jar文件,并運行程序。再次運行test.jnlp文件,就會直接運行程序了(不會再出現(xiàn)圖2的對話框)。
        如果這時服務(wù)端更新的test.jar,test.jnlp會自動檢測程序文件的更新時間,如果服務(wù)端程序更新,則會重新下載該程序,并運行。因此,使用jnlp文件也可以實現(xiàn)實時更新程序的功能。有些象微軟的smartclient。在更新服務(wù)端程序時,千萬別忘了對程序進行簽名啊,如果不簽名,在運行jnlp文件時就會出現(xiàn)如圖3所示的異常信息。
    圖3
        實際上,jnlp文件默認情況下將test.jar文件下載到C:\Documents and Settings\Administrator\Application Data\Sun\Java\Deployment\cache目錄中。但文件名并不是test.jar,讀者可以在該目錄中查找所有的文件,并找與test.jar文件的大小一樣的文件即可(一共也沒多少文件,很好找)。如文件名為27a940d-69feaa17。如果服務(wù)端和客戶端cache中的程序一樣新或沒有客戶端的新,則jnlp會直接運行客戶端cache中的程序。
        最后提一下,jnlp也是需要使用jre的哦,在使用jnlp之前,別忘了安裝jre啊!





    Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2009-05-22 15:38 銀河使者 閱讀(5875) 評論(4)  編輯  收藏 所屬分類: 原創(chuàng)安全程序發(fā)布

    評論

    # re: 使用腳本文件(jnlp)來發(fā)布Java程序[未登錄]  回復  更多評論   

    還是exe4j+Inno Setup 和install4j更好用
    都可以把程序打包成一個安裝程序并且把JRE也打包 用戶只需雙擊鼠標,瞇著眼睛點下一步直到安裝完成就可以使用。。不許要擁護做任何多余的操作,傻瓜式的使用是用戶更方便。
    2009-05-27 04:27 | 小毅

    # re: 使用腳本文件(jnlp)來發(fā)布Java程序  回復  更多評論   

    @小毅
    這個方法不光是安裝程序哦。還有一個實時更新的功能,如果服務(wù)端的程序更新的,就不用每個客戶端再次分發(fā)一遍安裝程序了,只需要再運行jnlp文件就可以直接下載了。哈哈
    2009-05-27 08:08 | 銀河使者

    # re: 使用腳本文件(jnlp)來發(fā)布Java程序[未登錄]  回復  更多評論   

    如果服務(wù)端的程序更新的,就不用每個客戶端再次分發(fā)一遍安裝程序了,只需要再運行jnlp文件就可以直接下載了。

    呵呵 這功能不錯。
    你的博客寫的很棒,敢肯定絕對是位牛人,而且還樂于分享、謙和、認真的朋友,支持你哈 ~0。0~。
    2009-09-21 17:30 | 小毅

    # re: 使用腳本文件(jnlp)來發(fā)布Java程序  回復  更多評論   

    樓主:
    想向你請教一個問題,如果我發(fā)布的java客戶端要讀取配置文件要怎么弄啊,
    比如說:我的客戶端里面有*.jar,*.property文件,jar文件可以通過<jar>標簽配置下載,那property文件要怎么配置啊。用java web start 發(fā)布后要怎么取得property文件啊
    2011-11-24 09:46 | 艾波
    主站蜘蛛池模板: 黄色免费网站在线看| 国产成人啪精品视频免费网| 久久亚洲中文无码咪咪爱| 亚洲av日韩av激情亚洲| 亚洲国产主播精品极品网红 | 免费国产在线观看老王影院| 精品一区二区三区免费毛片爱 | 一本久久综合亚洲鲁鲁五月天| 亚洲精品在线免费观看视频| 韩日电影在线播放免费版| 国产亚洲Av综合人人澡精品| 亚洲视频在线观看2018| 亚洲毛片免费观看| 亚洲国产高清视频| 亚洲乱码精品久久久久..| 亚洲综合色区在线观看| 伊在人亚洲香蕉精品区麻豆| 嫩草影院免费观看| 丁香花免费高清视频完整版| 久久久精品2019免费观看 | 国产亚洲av片在线观看16女人| 五月天婷亚洲天综合网精品偷| 精品久久免费视频| 成人免费淫片在线费观看 | 亚洲一区二区三区高清视频| 亚洲精品视频免费看| 久久久久亚洲AV无码专区首JN| 亚洲电影免费在线观看| 亚洲免费在线播放| 久久久无码精品亚洲日韩按摩 | 学生妹亚洲一区二区| 中文字幕亚洲综合小综合在线| 亚洲性猛交xx乱| 亚洲一卡2卡4卡5卡6卡在线99| 亚洲日本视频在线观看| 亚洲六月丁香六月婷婷蜜芽| 国产精品高清视亚洲精品| 亚洲性色精品一区二区在线| 亚洲Av永久无码精品一区二区| 理论亚洲区美一区二区三区 | 免费看国产曰批40分钟|