下一代Java Applet插件技術第二部分
Java Applet運行的就像一個由Java Web Start啟動的應用。參數(shù)jnlp_href在Web頁面和Java Applet的JNLP描述之間起到了橋接的作用。在如寬度與高度這樣的特定方面,Applet標簽與JNLP文件具有重疊的機制。
一般地,你應該使用Deployment Toolkit,這也是一個出現(xiàn)在Java SE 6 Update 10中的新工具,它能自動地為Applet標簽生成HTML。部署建議指南展示了如何使用Deployment Toolkit簡便地發(fā)布Applet。
兼容性
現(xiàn)在可更容易維護向后兼容性。你可創(chuàng)建運行在更早Java插件版本上的程序,但僅需提供一個與jnlp_href參數(shù)一樣的格式完整的<applet>標簽就可使用這些新特性了。早期版本的JRE會忽略jnlp_href參數(shù),轉而使用<applet>標簽。新的Java插件技術將忽略archive和code參數(shù),而僅使用JNLP文件去啟動Applet。
World Wind Applet示例
由World Wind Java開發(fā)組創(chuàng)建的NASA World Wind Java Applet示例闡述了如果發(fā)布像NASA World Wind Java這樣的領先類庫。同樣地,也用示例說明了如何使用JavaScript在Web頁面中高效地整合HTML和Applet內(nèi)容。
Figure 2. NASA World Wind Applet
該Web頁面包含了關于喀斯喀特山脈的信息(要感謝維基百科),并且將World Wind Java作為一個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隨標準的World Wind Java發(fā)行包發(fā)布。如下所述,你可選擇編寫你自己的Applet類并將World Wind嵌入其中:
下面是WWJApplet.jnlp文件中相關的部分:
- <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>
注意幾點:
在本例中,worldwind.jar作為主類使用。理想地,從NASA的網(wǎng)站引用它,將其作為一個JNLP擴展,這就使得許多不同的都嵌入了World Wind的應用程序或Applet共享相同的jar文件。詳情請見下面的內(nèi)容。
為了它的硬件加速的3D圖形,World Wind Java使用了針對OpenGL API的Java綁定,JOGL。注意,JOGL JNLP擴展僅使用一行代碼與應用程序進行結合。也要注意,在Windows平臺上,由于OpenGL API與DirectDraw/Direct3D API(該API用于Windows平臺默認的Java 2D實現(xiàn))之間在驅(qū)動層面的沖突,需要指定系統(tǒng)參數(shù)-Dsun.java2d.noddraw=true。Windows平臺上所有使用JOGL的應用程序與Applet程序都需要該系統(tǒng)參數(shù)。
Web頁面中的HTML鏈接調(diào)用JavaScript函數(shù),該函數(shù)會與Applet進行交互并將其導向合適的山峰。下面是這些鏈接中的一個:
- <a href="javascript:gotoLocation(MOUNT_RAINIER);">Mount Rainier</a>
- (southeast of Tacoma, Washington)
當點擊該鏈接后,將會調(diào)用JavaScript函數(shù)gotoLocation。該函數(shù)定義在同一個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)用將起動一個JavaScript-to-Java調(diào)用,把參數(shù)從JavaScript引擎?zhèn)鹘oJava。World Wind Applet接收該通知,并將視點以動畫的方式切換到適當?shù)牡胤健W⒁?,gotoLatLon方法會迅速地返回,以便瀏覽器不必等待它的完成;該動畫會在一個單獨的Java線程中運行。
Figure 3. World Wind Applet with Mount St. Helen's Clicked
如上所述,將World Wind Java集成到你的應用程序或Applet程序中的最好方法是將其作為一個JNLP擴展。這允許很多來自網(wǎng)絡的集成了World Wind Java的應用程序或Applet程序能夠共享World Wind代碼資源。為了引用World Wind JNLP擴展,你需將下面的語句行加入到你的應用程序或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擴展JNLP是區(qū)分版本的,所以你需參考World Wind文檔或訪問論壇去找到你的JNLP會引用到的擴展的最新版本。World Wind Central是一個關于World Wind最新信息的有用資源。
class MyWWJApplet extends WWJApplet {}
將World Wind作為一個擴展使用就意味著你不能將WWJApplet直接作為你的main-class使用。由于JNLP文件格式的語義,主jar (main="true")必須定義在主JNLP文件中。但很容易就能適應該限制,你可簡單地創(chuàng)建你自己的WWJApplet子類(稱之為MyWWJApplet),而它并不做任何事情:
將worldwind.jar置于classpath中,并編譯上述類,然后將該類放入它自己的jar文件中。引入這個jar作為你的主jar,MyWWJApplet就成為了你的main-class,然后將其作為JNLP擴展引入到World Wind中。
結論
介紹了Java插件對JNLP的支持,這為Applet的發(fā)布提供了很多新的可能,這對在瀏覽器內(nèi)外發(fā)布Java內(nèi)容的方法的統(tǒng)一又進了一大步。Applet自從它們起始已過了很長的時間,現(xiàn)在隨著對JNLP的支持,它們會比以往更快,也更易于定制。
【編輯推薦】