下一代Java Applet插件技术第二部分

开发 后端
本文是下一代Java Applet插件技术的第一部分,讲到了Java applet,插件技术的兼容性,需要注意的问题和结论。

Java Applet运行的就像一个由Java Web Start启动的应用。参数jnlp_href在Web页面和Java Applet的JNLP描述之间起到了桥接的作用。在如宽度与高度这样的特定方面,Applet标签与JNLP文件具有重叠的机制。

一般地,你应该使用Deployment Toolkit,这也是一个出现在Java SE 6 Update 10中的新工具,它能自动地为Applet标签生成HTML。部署建议指南展示了如何使用Deployment Toolkit简便地发布Applet。

兼容性

现在可更容易维护向后兼容性。你可创建运行在更早Java插件版本上的程序,但仅需提供一个与jnlp_href参数一样的格式完整的<applet>标签就可使用这些新特性了。早期版本的JRE会忽略jnlp_href参数,转而使用<applet>标签。新的Java插件技术将忽略archive和code参数,而仅使用JNLP文件去启动Applet。

  World Wind Applet示例

由World Wind Java开发组创建的NASA World Wind Java Applet示例阐述了如果发布像NASA World Wind Java这样的领先类库。同样地,也用示例说明了如何使用JavaScript在Web页面中高效地整合HTML和Applet内容。

 

NASA World Wind Applet

  Figure 2. NASA World Wind Applet

该Web页面包含了关于喀斯喀特山脉的信息(要感谢维基百科),并且将World Wind Java作为一个Applet嵌入其中,以图示该山脉中各山的位置。

  1. <applet id="wwjApplet" width=600 height=380                
  2.     code="gov.nasa.worldwind.examples.applet.WWJApplet"                
  3.     archive="BackwardCompatibility.jar">   
  4.     <param name="jnlp_href" value="WWJApplet.jnlp">        
  5. </applet>  

 WWJApplet随标准的World Wind Java发行包发布。如下所述,你可选择编写你自己的Applet类并将World Wind嵌入其中:

下面是WWJApplet.jnlp文件中相关的部分:

  1. <jnlp href="WWJApplet.jnlp">   
  2. <resources os="Windows">            
  3. <property name="sun.java2d.noddraw" value="true"/>          
  4. </resources>          
  5. <resources>            
  6. <j2se href="http://java.sun.com/products/autodl/j2se" version="1.4+"/>            
  7. <jar href="worldwind.jar" main="true" />            
  8. <extension name="jogl"               
  9.  href="http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jnlp" />          
  10. </resources>          
  11. <applet-descname="WWJ Applet"              
  12.     main-class="gov.nasa.worldwind.examples.applet.WWJApplet"              
  13.     <!-- Overwritten by the surrounding web page -->              
  14.     width="100"               
  15.     height="100">          
  16. </applet-desc>        
  17. </jnlp>  

注意几点:

在本例中,worldwind.jar作为主类使用。理想地,从NASA的网站引用它,将其作为一个JNLP扩展,这就使得许多不同的都嵌入了World Wind的应用程序或Applet共享相同的jar文件。详情请见下面的内容。

为了它的硬件加速的3D图形,World Wind Java使用了针对OpenGL API的Java绑定,JOGL。注意,JOGL JNLP扩展仅使用一行代码与应用程序进行结合。也要注意,在Windows平台上,由于OpenGL API与DirectDraw/Direct3D API(该API用于Windows平台默认的Java 2D实现)之间在驱动层面的冲突,需要指定系统参数-Dsun.java2d.noddraw=true。Windows平台上所有使用JOGL的应用程序与Applet程序都需要该系统参数。

Web页面中的HTML链接调用JavaScript函数,该函数会与Applet进行交互并将其导向合适的山峰。下面是这些链接中的一个:

  1. <a href="javascript:gotoLocation(MOUNT_RAINIER);">Mount Rainier</a>   
  2.     (southeast of Tacoma, Washington)   

当点击该链接后,将会调用JavaScript函数gotoLocation。该函数定义在同一个Web页面中:

  1. function gotoLocation(locationString) {   
  2.     var params = locationString.split(';');   
  3.     if(params.length == 3)  // Lat/lon   
  4.     getWWJApplet().gotoLatLon(parseFloat(params[1]),   
  5.     parseFloat(params[2]));   
  6.        
  7. }  

Web页面HTML中的山峰位置将被解码为JavaScript字符串。将从这些字符串中解析出纬度,经度及其它视觉信息,并将它们传递给Applet。 gotoLatLon方法是在WWJApplet类中定义的;上面的方法调用将起动一个JavaScript-to-Java调用,把参数从JavaScript引擎传给Java。World Wind Applet接收该通知,并将视点以动画的方式切换到适当的地方。注意,gotoLatLon方法会迅速地返回,以便浏览器不必等待它的完成;该动画会在一个单独的Java线程中运行。

 

World Wind Applet with Mount St. Helen

  Figure 3. World Wind Applet with Mount St. Helen's Clicked

如上所述,将World Wind Java集成到你的应用程序或Applet程序中的最好方法是将其作为一个JNLP扩展。这允许很多来自网络的集成了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是区分版本的,所以你需参考World Wind文档或访问论坛去找到你的JNLP会引用到的扩展的最新版本。World Wind Central是一个关于World Wind最新信息的有用资源。

class MyWWJApplet extends WWJApplet {}


将World Wind作为一个扩展使用就意味着你不能将WWJApplet直接作为你的main-class使用。由于JNLP文件格式的语义,主jar (main="true")必须定义在主JNLP文件中。但很容易就能适应该限制,你可简单地创建你自己的WWJApplet子类(称之为MyWWJApplet),而它并不做任何事情:

将worldwind.jar置于classpath中,并编译上述类,然后将该类放入它自己的jar文件中。引入这个jar作为你的主jar,MyWWJApplet就成为了你的main-class,然后将其作为JNLP扩展引入到World Wind中。

结论

介绍了Java插件对JNLP的支持,这为Applet的发布提供了很多新的可能,这对在浏览器内外发布Java内容的方法的统一又进了一大步。Applet自从它们起始已过了很长的时间,现在随着对JNLP的支持,它们会比以往更快,也更易于定制。

 

【编辑推荐】

  1. 20个开发人员非常有用的Java功能代码
  2. 走进Java 7中的模块系统
  3. JavaFX 1.2 已经发布 主要新功能一览
  4. 2009年十大Java技术解决方案
  5. 下一代Java Applet插件技术第一部分
责任编辑:仲衡 来源: CSDN博客
相关推荐

2009-06-15 13:32:18

Java applet插件

2019-04-11 10:50:26

前端JavaScript开发

2009-06-12 10:48:33

Java Date

2009-06-11 15:38:00

Java随机数

2009-06-09 15:00:51

Javascript表单验证

2013-09-17 09:45:55

编程

2013-12-13 13:16:42

LinuxLinux面试题

2009-06-12 10:18:59

StaticJava

2009-08-24 17:18:36

下一代网络三网融合广电网络

2013-05-28 13:44:01

Java下一代

2013-04-08 16:16:59

Backbone.jsCRUD

2013-05-28 14:02:22

GroovyScala语言

2015-06-17 11:33:58

数据中心模块化

2013-07-27 21:28:44

2013-10-11 14:29:44

Java开发

2018-12-20 08:20:43

物联网供应链IOT

2013-06-27 11:21:17

2009-10-29 17:05:57

无线接入技术

2014-12-01 17:20:20

2010-09-01 17:05:04

无线网络
点赞
收藏

51CTO技术栈公众号