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

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

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

    John Jiang

    a cup of Java, cheers!
    https://github.com/johnshajiang/blog

       :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理 ::
      131 隨筆 :: 1 文章 :: 530 評論 :: 0 Trackbacks
    下一代Java Applet插件技術(shù)
        Java SE 6對Java桌面應(yīng)用進(jìn)行較大的升級,并啟動了Java SE 6 Update N計(jì)劃,該計(jì)劃旨在簡化JRE的大小,增進(jìn)用戶的安裝體驗(yàn),并提供了一個(gè)新的Applet瀏覽器插件,該插件將會隨Java SE 6 Update 10發(fā)布。本文全面介紹了這個(gè)新插件的關(guān)鍵特性,并以NASAWorld Wind為例介紹了該插件的應(yīng)用。(2008.07.15最后更新)

    Applet回來了!
    為了在網(wǎng)絡(luò)中傳遞你的程序,是時(shí)候再次考慮Java Applet技術(shù)了。下一代Java插件技術(shù)以一種不同的,比過去更高效、更可靠的途徑來運(yùn)行Applet。現(xiàn)在你可以獲得如下好處:
    • 增強(qiáng)的可靠性
    • 改進(jìn)的用戶體驗(yàn)
    • 在后臺啟動Applet
    • 內(nèi)建的JNLP支持
    • 針對每個(gè)Applet的命令行參數(shù)
    • 堆內(nèi)存大小,Java 2D API加速選項(xiàng)
    • 改進(jìn)的Java/JavaScript程序設(shè)計(jì)語言集成
    • 改進(jìn)的Windows Vista支持
    • 簽名的Applet現(xiàn)在可以在Internet Explorer的保護(hù)模式中正常運(yùn)行
    下一代Java插件提供了一種完全重新設(shè)計(jì)的架構(gòu),它將出現(xiàn)在Java SE 6 Update 10中。該插件為運(yùn)行在網(wǎng)絡(luò)瀏覽器中的Applet提供了強(qiáng)大的新功能,它以向后兼容的方式改進(jìn)了整個(gè)Applet的可靠性及功能。
    下一代Java插件最有意義的新特性是它內(nèi)建支持通過JNLP文件啟動Applet。使用JNLP文件格式作為Applet的描述符就能允許Applet馬上復(fù)用之前為Java Web Start應(yīng)用所寫的JNLP擴(kuò)展。

    執(zhí)行Applet的新途徑

    執(zhí)行Applet的新途徑在結(jié)構(gòu)上與Java Web Start技術(shù)相似,但與瀏覽器整合的更為緊密。Applet不在運(yùn)行于網(wǎng)絡(luò)瀏覽器內(nèi)的JVM中,而是會啟動一個(gè)獨(dú)立的JVM進(jìn)程去運(yùn)行Applet。默認(rèn)地,只有一個(gè)JVM將被啟動,但你也能啟動多個(gè)JVM,并且可以為每個(gè)Applet都設(shè)置命令行參數(shù),所以你能影響堆內(nèi)存的大小或其它的要求。

                  
    Figure 1. Applet Architecture
    在上圖中,云表示JVM實(shí)例。在瀏覽器內(nèi)有一個(gè)小的,headless JVM被用于管理一個(gè)或多個(gè)客戶端JVM之間的連接,這些JVM運(yùn)行著Applet。在該圖中,Duke表示Applet。其中,一個(gè)JVM實(shí)例運(yùn)行著兩個(gè)Applet,另一個(gè)運(yùn)行著一個(gè)Applet。
    Applet直接從JNLP文件啟動,它使用的JNLP文件與Java Web Start軟件使用的描述符文件相同,并且允許使用比典型的"archive","code"和"cache_archive"更為強(qiáng)大的參數(shù)。
    新的插件提供了:
    • 能夠訪問之前僅由Java Web Start軟件專用的高級JNLP擴(kuò)展。之前有少部分參數(shù)能夠使用,但有一些限制,現(xiàn)在這些限制則被去除。
    • 通過Applet訪問JNLP API。
    • 支持PersistenceService和DownloadService。
    • 能夠控制堆內(nèi)存大小,命令行參數(shù),JRE版本選擇和自動下載。你具有Java Web Start軟件所擁有的相同功能。
    現(xiàn)在你就可以在Web頁面中使用像下面這樣的語句了:
    <applet width=500” height=500>
        
    <param name=”jnlp_href” value=”my_applet.jnlp”>
    </applet>
    調(diào)用Applet生命周期方法init,start,stop和destroy會更為確定,并且已經(jīng)改進(jìn)了跨瀏覽器行為。完全支持Applet類裝載器緩存,遺留的Applet生命周期及對向后兼容性的需求,并且這些行為都已得到了改進(jìn)。
    Applet運(yùn)行的就像一個(gè)由Java Web Start啟動的應(yīng)用。參數(shù)jnlp_href在Web頁面和Applet的JNLP描述之間起到了橋接的作用。在如寬度與高度這樣的特定方面,Applet標(biāo)簽與JNLP文件具有重疊的機(jī)制。
    一般地,你應(yīng)該使用Deployment Toolkit,這也是一個(gè)出現(xiàn)在Java SE 6 Update 10中的新工具,它能自動地為Applet標(biāo)簽生成HTML。部署建議指南展示了如何使用Deployment Toolkit簡便地發(fā)布Applet。

    配置Applet
    現(xiàn)在也能更為簡單地在多個(gè)方面來配置Applet,包括堆內(nèi)存大小,需要被使用的Java版本,類加載器緩存,邊界,及其它。
    <applet>與JNLP文件在針對某些參數(shù)時(shí)有重疊的機(jī)制。這些沖突可以用如下方法解決:
    • width and height:這些屬性將總是從<applet>,而不是JNLP文件,中獲取。這是假設(shè)瀏覽器知道Applet在Web頁面上應(yīng)該顯示多大,也只有瀏覽器才能支持相對于頁面的寬度與高度(例如,width="50%")。
    • codebase:如果JNLP文件在<jnlp>標(biāo)簽中指定了一個(gè)絕對的codebase,那么就使用它。否則,將使用在codebase handling一節(jié)中描述的規(guī)則進(jìn)行組織。
    • code:當(dāng)指定了jnlp_href參數(shù),Applet的主類名將從main-class參數(shù)換成JNLP文件中的applet-desc標(biāo)簽,并且code屬性會被忽略。注意,該特性允許你為經(jīng)典Java插件寫一個(gè)擁有反饋的Applet標(biāo)簽,但在新的Java插件中,該標(biāo)簽可使用更高級的功能。請見下面的"兼容性"一節(jié)。
    • 任何一個(gè)由<param>標(biāo)簽指定的Applet參數(shù)將與JNLP文件中指定的參數(shù)進(jìn)行合并。如果<applet>標(biāo)簽和JNLP文件都指定了同一個(gè)參數(shù),<applet>標(biāo)簽中的版本將覆蓋JNLP文件中的版本,除了參數(shù)java_arguments和java_version。
    • 新的java_arguments和java_version參數(shù)在JNLP Applet中是不必要的。會替換為通過JNLP文件請求JRE版本或向JVM傳遞參數(shù)的機(jī)制。所以,命令行參數(shù)和JNLP文件請求的JRE版本將會覆蓋HTML中為Applet指定的這些值。
    • 特定的參數(shù),例如image,boxbgcolor等等,在Applet的啟動過程中是有用的。在HTML而不是JNLP文件中指定這些參數(shù)可能更好些,以便于在加載Web頁面時(shí)就可立即獲取它們,而不用再等到單獨(dú)下載JNLP文件之后。
    過去,通過Java控制面板設(shè)置最大堆內(nèi)存是有限制的。在新的Java插件中,這些限制被取消。現(xiàn)在Applet可以像命令行應(yīng)用那樣使用大量堆空間。
    指定一個(gè)比默認(rèn)值大的堆空間:
    <APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">      
        
    <PARAM name="java_arguments" value="-Xmx128m">  
    </APPLET>
    指定一個(gè)非默認(rèn)大小的堆內(nèi)存以及一個(gè)Java 2D硬件加速器選項(xiàng),該選項(xiàng)常通過JOGL使用OpenGL應(yīng)用于Applet。
    <APPLET archive="my_applet.jar" code="MyApplet" width="300" height="300">      
        
    <PARAM name="java_arguments" value="-Xmx256m -Dsun.java2d.noddraw=true">  
    </APPLET>
    如果你喜歡,一個(gè)Applet可強(qiáng)制進(jìn)入一個(gè)屬于它自己的JVM實(shí)例,而與所有其它的Applet隔離開:
    <param name=”separate_jvm” value=true” />
    當(dāng)把某些桌面應(yīng)用移植到Web瀏覽器時(shí),這就有用了。
    你也能使特定的Applet運(yùn)行在特定版本的JRE上,如下所示:
    <j2se version=1.4+” >
    <j2se version=1.5*” >
    當(dāng)想針對特定版本的JRE,或Applet取代早期版本的選擇機(jī)制(如同IE瀏覽器中的CLSID),進(jìn)行質(zhì)量測評時(shí),該方法就很有用了。如果請求了一個(gè)非常老的JRE版本,就會強(qiáng)制執(zhí)行限制;如果Applet試圖加載未簽名的代碼,將會提示用戶。
    注意,因?yàn)橹С諮NLP的Java插件是在Java SE 6 Update 10中才首次出現(xiàn)的,所以指定像“1.4+”這樣的版本基本上沒有意義的。當(dāng)需要“1.7+”時(shí),這才有意義。
    另外,你可以在JNLP文件中使用<update>標(biāo)簽來顯著降低第二次及接下來各次啟動的時(shí)間。
    <update check=”background”>
    在這種情況下,將使用緩存中已有的Applet程序,并且在后臺下載該應(yīng)用的更新版本。在下次啟動時(shí),就會使用新版本。
    新的插件也能更好地對圖像進(jìn)行定制,在Applet被加載之前會展示該圖像。image參數(shù)會以支持動畫GIF文件作為目標(biāo),Java Plug-in Developers' GuideSpecial Attributes一節(jié)對此有描述。此外,現(xiàn)也支持如下新的參數(shù):
    boxborder
    一個(gè)布爾型參數(shù),用于指定在Applet被加載之前是否在Applet區(qū)域的邊緣繪制一個(gè)寬度一象素的邊框。默認(rèn)為true。我們建議將該值設(shè)置為false,特別是將一個(gè)動畫GIF用作加載期圖像時(shí),以避免可能的閃爍。
    centerimage
    一個(gè)布爾型參數(shù),用于指定是否將加載期圖像在Applet區(qū)域內(nèi)居中顯示,而不是從左上角起始。默認(rèn)為false。
    使用參數(shù)boxborder和centerimage的例子:
    <APPLET archive="large_archive.jar"
        code
    ="MyApplet"
        width
    ="300" height="300">
        
    <!-- Use an animated GIF as an indeterminate progress bar
            
    while the applet is loading -->
        
    <PARAM NAME="image" VALUE="animated_gif.gif">
        
    <!-- Turn off the box border for better blending with the
            surrounding web page 
    -->
        
    <PARAM NAME="boxborder" VALUE="false">
        
    <!-- Center the image in the applet's area -->
        
    <PARAM NAME="centerimage" VALUE="true">
    </APPLET>

    兼容性
    現(xiàn)在可更容易維護(hù)向后兼容性。你可創(chuàng)建運(yùn)行在更早Java插件版本上的程序,但僅需提供一個(gè)與jnlp_href參數(shù)一樣的格式完整的<applet>標(biāo)簽就可使用這些新特性了。早期版本的JRE會忽略jnlp_href參數(shù),轉(zhuǎn)而使用<applet>標(biāo)簽。新的Java插件技術(shù)將忽略archive和code參數(shù),而僅使用JNLP文件去啟動Applet。

    World Wind Applet示例
    由World Wind Java開發(fā)組創(chuàng)建的NASA World Wind Java Applet示例闡述了如果發(fā)布像NASA World Wind Java這樣的領(lǐng)先類庫。同樣地,也用示例說明了如何使用JavaScript在Web頁面中高效地整合HTML和Applet內(nèi)容。

                  
    Figure 2. NASA World Wind Applet
    該Web頁面包含了關(guān)于喀斯喀特山脈的信息(要感謝維基百科),并且將World Wind Java作為一個(gè)Applet嵌入其中,以圖示該山脈中各山的位置。
    <applet id="wwjApplet" width=600 height=380             
        code
    ="gov.nasa.worldwind.examples.applet.WWJApplet"             
        archive
    ="BackwardCompatibility.jar">
        
    <param name="jnlp_href" value="WWJApplet.jnlp">     
    </applet>
    WWJApplet隨標(biāo)準(zhǔn)的World Wind Java發(fā)行包發(fā)布。如下所述,你可選擇編寫你自己的Applet類并將World Wind嵌入其中:
    下面是WWJApplet.jnlp文件中相關(guān)的部分:
    <jnlp href="WWJApplet.jnlp">
    <resources os="Windows">         
    <property name="sun.java2d.noddraw" value="true"/>       
    </resources>       
    <resources>         
    <j2se href="http://java.sun.com/products/autodl/j2se" version="1.4+"/>         
    <jar href="worldwind.jar" main="true" />         
    <extension name="jogl"            
     href
    ="http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jnlp" />       
    </resources>       
    <applet-descname="WWJ Applet"           
        main
    -class="gov.nasa.worldwind.examples.applet.WWJApplet"           
        
    <!-- Overwritten by the surrounding web page -->           
        width
    ="100"            
        height
    ="100">       
    </applet-desc>     
    </jnlp>
    注意幾點(diǎn):
    • 在本例中,worldwind.jar作為主類使用。理想地,從NASA的網(wǎng)站引用它,將其作為一個(gè)JNLP擴(kuò)展,這就使得許多不同的都嵌入了World Wind的應(yīng)用程序或Applet共享相同的jar文件。詳情請見下面的內(nèi)容。
    • 為了它的硬件加速的3D圖形,World Wind Java使用了針對OpenGL API的Java綁定,JOGL。注意,JOGL JNLP擴(kuò)展僅使用一行代碼與應(yīng)用程序進(jìn)行結(jié)合。也要注意,在Windows平臺上,由于OpenGL API與DirectDraw/Direct3D API(該API用于Windows平臺默認(rèn)的Java 2D實(shí)現(xiàn))之間在驅(qū)動層面的沖突,需要指定系統(tǒng)參數(shù)-Dsun.java2d.noddraw=true。Windows平臺上所有使用JOGL的應(yīng)用程序與Applet程序都需要該系統(tǒng)參數(shù)。
    Web頁面中的HTML鏈接調(diào)用JavaScript函數(shù),該函數(shù)會與Applet進(jìn)行交互并將其導(dǎo)向合適的山峰。下面是這些鏈接中的一個(gè):
    <a href="javascript:gotoLocation(MOUNT_RAINIER);">Mount Rainier</a>
        (southeast of Tacoma, Washington) 
    當(dāng)點(diǎn)擊該鏈接后,將會調(diào)用JavaScript函數(shù)gotoLocation。該函數(shù)定義在同一個(gè)Web頁面中:
    function gotoLocation(locationString) {
        
    var params = locationString.split(';');
        
    if(params.length == 3)  // Lat/lon
        getWWJApplet().gotoLatLon(parseFloat(params[1]),
        parseFloat(params[
    2]));
        
    }
    Web頁面HTML中的山峰位置將被解碼為JavaScript字符串。將從這些字符串中解析出緯度,經(jīng)度及其它視覺信息,并將它們傳遞給Applet。 gotoLatLon方法是在WWJApplet類中定義的;上面的方法調(diào)用將起動一個(gè)JavaScript-to-Java調(diào)用,把參數(shù)從JavaScript引擎?zhèn)鹘oJava。World Wind Applet接收該通知,并將視點(diǎn)以動畫的方式切換到適當(dāng)?shù)牡胤健W⒁猓琯otoLatLon方法會迅速地返回,以便瀏覽器不必等待它的完成;該動畫會在一個(gè)單獨(dú)的Java線程中運(yùn)行。

      
    Figure 3. World Wind Applet with Mount St. Helen's Clicked
    如上所述,將World Wind Java集成到你的應(yīng)用程序或Applet程序中的最好方法是將其作為一個(gè)JNLP擴(kuò)展。這允許很多來自網(wǎng)絡(luò)的集成了World Wind Java的應(yīng)用程序或Applet程序能夠共享World Wind代碼資源。為了引用World Wind JNLP擴(kuò)展,你需將下面的語句行加入到你的應(yīng)用程序或Applet程序的JNLP文件中的<resources>部分:
    <extension name="worldwind" href="http://worldwind.arc.nasa.gov/java/0.4.1/webstart/worldwind.jnlp"/>     
    <extension name="jogl"       
        href
    ="http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jnlp"/>
    注意,World Wind擴(kuò)展JNLP是區(qū)分版本的,所以你需參考World Wind文檔或訪問論壇去找到你的JNLP會引用到的擴(kuò)展的最新版本。World Wind Central是一個(gè)關(guān)于World Wind最新信息的有用資源。
    將World Wind作為一個(gè)擴(kuò)展使用就意味著你不能將WWJApplet直接作為你的main-class使用。由于JNLP文件格式的語義,主jar (main="true")必須定義在主JNLP文件中。但很容易就能適應(yīng)該限制,你可簡單地創(chuàng)建你自己的WWJApplet子類(稱之為MyWWJApplet),而它并不做任何事情:
    class MyWWJApplet extends WWJApplet {}
    將worldwind.jar置于classpath中,并編譯上述類,然后將該類放入它自己的jar文件中。引入這個(gè)jar作為你的主jar,MyWWJApplet就成為了你的main-class,然后將其作為JNLP擴(kuò)展引入到World Wind中。

    結(jié)論
    介紹了Java插件對JNLP的支持,這為Applet的發(fā)布提供了很多新的可能,這對在瀏覽器內(nèi)外發(fā)布Java內(nèi)容的方法的統(tǒng)一又進(jìn)了一大步。Applet自從它們起始已過了很長的時(shí)間,現(xiàn)在隨著對JNLP的支持,它們會比以往更快,也更易于定制。

    posted on 2008-07-14 19:56 John Jiang 閱讀(3996) 評論(2)  編輯  收藏 所屬分類: Java翻譯AppletGUI

    評論

    # re: 下一代Java Applet插件技術(shù) 2008-07-14 20:02 maven
    這里也有介紹:Next-Generation Java Plug-In Technology
    http://www.javaread.com/article/show/81  回復(fù)  更多評論
      

    # re: 下一代Java Applet插件技術(shù) 2008-07-15 08:52 Sha Jiang
    介紹新的Java Applet插件的文章肯定已有很多:-)  回復(fù)  更多評論
      

    主站蜘蛛池模板: 亚洲JLZZJLZZ少妇| 日产亚洲一区二区三区| 无码视频免费一区二三区| 四虎精品视频在线永久免费观看| 麻豆成人久久精品二区三区免费| 亚洲毛片av日韩av无码| 亚洲精品国产成人影院| 国产亚洲福利一区二区免费看 | 免费看国产一级特黄aa大片| 亚洲av日韩av欧v在线天堂| 色偷偷噜噜噜亚洲男人| 日本二区免费一片黄2019| 狠狠入ady亚洲精品| 91精品成人免费国产| 亚洲综合无码精品一区二区三区| 国产精品福利片免费看| 最近中文字幕无免费视频| 国产亚洲国产bv网站在线| 丝袜足液精子免费视频| 久久国产亚洲精品麻豆| 中文字幕视频免费| 亚洲一欧洲中文字幕在线| 成人午夜视频免费| 一级毛片大全免费播放下载 | 好先生在线观看免费播放| 亚洲精品蜜夜内射| 亚洲精品无码成人片在线观看 | 免费观看男人吊女人视频| 亚洲精品电影天堂网| 无码永久免费AV网站| 国产成人+综合亚洲+天堂| 免费无码又爽又刺激一高潮| 亚洲自偷精品视频自拍| 免费国产黄网站在线看| 国产免费女女脚奴视频网| 亚洲国产精品视频| 亚洲国产精品久久久久秋霞影院| 国产亚洲精品bv在线观看| 免费v片视频在线观看视频| 中文永久免费观看网站| 亚洲成a人不卡在线观看|