在html中以applet的形式展示worldwind

首先添加worldwind运行需要的环境,将你下载下来的源文件worldwind文件夹下的,jogl.dll,gluegen-rt.dll,jogl_awt.dll,jogl_cg.dll放到你JDK\jre\bin文件夹下)

创建一个 web project项目Test ,将worldwind文件夹中的src下的config文件夹复制到Test的src中,现在创建一个可运行的applet程序,代码如下:

package com;

import gov.nasa.worldwind.*;
import gov.nasa.worldwind.avlist.AVKey;
import gov.nasa.worldwind.awt.WorldWindowGLCanvas;
import gov.nasa.worldwind.util.StatusBar;
import javax.swing.*;
import java.awt.*;

/**
 * Illustrates the how to display a World Wind <code>{@link WorldWindow}</code> in a Java Applet and interact with the
 * WorldWindow through JavaScript code running in the browser. This class extends <code>{@link JApplet}</code> and
 * embeds a WorldWindowGLCanvas and a StatusBar in the Applet's content pane.
 *
 * @author Patrick Murris
 * @version $Id: WWJApplet.java 1 2011-07-16 23:22:47Z dcollins $
 */
public class WWJApplet extends JApplet
{
	static

    {

        System.setProperty("gov.nasa.worldwind.config.file", "config/worldwind.properties");

    }
    public WWJApplet()
    {
    }

    public void init()
    {
        try
        {
            // Create World Window canvas.
            WorldWindowGLCanvas wwd = new WorldWindowGLCanvas();
            this.getContentPane().add(wwd, BorderLayout.CENTER);

            // Create the default model as defined in the current worldwind configuration file.
            wwd.setModel((Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME));

            // Add the status bar, and forward events to the status bar to provide the cursor position info.
            StatusBar statusBar = new StatusBar();
            statusBar.setEventSource(wwd);
            this.getContentPane().add(statusBar, BorderLayout.SOUTH);
        }
        catch (Throwable e)
        {
            e.printStackTrace();
        }
    }

    public void stop()
    {
        // Shut down World Wind when the browser stops this Applet.
        WorldWind.shutDown();
    }
}

这时候,程序会报错,因为缺少库,执行build path 加入worldwind文件夹下的jogl.jar,gluegen-rt.jar(添加方法和下面添加jar文件一致)。最后还需要加入一个jar文件worldwind,但这个worldwind.jar不是worldwind文件夹下的worldwind.jar,而是此时我们重新进行打包的一个jar(这样做是因为,下载下来的worldwind.jar已经签名,我们发布applet的时候需要自己签名的jar)。做法如下,创建一个eclipse项目test1,将worldwind\src文件夹下的所有文件拷贝到test1的src文件夹下,右键项目 build path ,config build path后弹出下面的框


点击Add external jar添加worldwind文件下的几个jar文件(如上图),Run as Java Applet运行test1,若程序正常运行,右键项目,export,然后选择JAVA目录下的JAR,点击next,弹出如下框


这个弹框里,选择默认,红框部分,是你给这个导出的jar文件导出的地方和名字,我们可以选择将其放倒Test项目下,再点击next,生成worldwind.jar。(注意,这个项目中,我们build path了jogl.jar,gluegen-rt.jar,和worldwind.jar,我们还需要将这三个文件复制放到Test文件夹下)这个时候我们创建的Test项目不再报错,运行Test项目WWJApplet.java运行正常。我们再将Test项目export为JAR文件WWJApplet.jar放到Test目录下,Test工程结果如下


接下来,我们对几个jar文件签名,打开cmd,进入到Test项目目录下(签名之前可先验证一下自己的jar文件是否签名  jarsigner  -verify  jogl.jar,并且要注意,Test目录下的jogl.jar,和gluegen-rt.jar,最好是从worldwind文件夹下复制过来的,最好不要直接对worldwind文件夹下的jar文件签名),步骤如下
1、keytool -genkey -aliasyourname -validity 3650//使用 keytool 工具创建签名密匙证书




        -genkey 参数表示是创建操作


        -alias 参数表示 给这个证书取一个别名  我这里用的别名是 Test(你也可取你的名字之类的)


        -validity 参数表示的是这个证书的有效期  我这里用3650 表示 十年。


         这个命令执行后会提示属于一些证书的相关信息,如密码,单位,之类的按自己的情况填写即可


      注意输入口令的时候,他是不显示的,如下图所示,你不要担心是自己的键盘失灵了,你可以很简单输入123之类的,当然你也可以写复杂一点的,但一定要记住,因为每一个签名都要用到。


2、keytool -export -alias Test -file yourname.crt


3、jarsigner worldwind.jar yourname


这样将jogl.jar,gluegen-rt.jar,worldwind.jar,WWJApplet.jar全部签名了。

下面我们来写jnlp文件,我们命名为WWJApplet.jnlp

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.7+" codebase="http://localhost:8080/Test" href="WWJApplet.jnlp">
    <information>
        <title>MyApplet</title>
        <vendor>测试</vendor>
        <offline-allowed/>
    </information>
    <security>
        <all-permissions/>
   </security>
    <resources os="Windows">
        <property name="sun.java2d.noddraw" value="true"/>
    </resources>
    <resources>
        <!-- Application Resources -->
        <j2se version="1.7+" href=17
           "http://java.sun.com/products/autodl/j2se" initial-heap-size="512m"
              max-heap-size="512m"/>
        <property name="sun.java2d.noddraw" value="true"/>
        <jar href="WWJApplet.jar" main="true" />
        <jar href="worldwind.jar" />
        <jar href="jogl.jar" />
        <jar href="gluegen-rt.jar" />
    </resources>
    <applet-desc
         name="测试程序"
         main-class="com.WWJApplet"		
         width="500"
         height="500">
         <param name="separate_jvm" value="true"/>
     </applet-desc>
     <update check="background"/>
</jnlp>

最后我们写html文件,WWJApplet.html

<html>
<head>
<meta charset="UTF-8">
<title>worldwind</title>
</head>
<body>
<applet  codebase="."
    code="WWJApplet.jar" width="100%" height="500">
    <param name="jnlp_href" value="WWJApplet.jnlp">
    <param name="codebase_lookup" value="false">
    <param name="subapplet.classname" value="WWJApplet">
    <param name="subapplet.displayname" value="WWJ Applet">
    <param name="noddraw.check" value="true">
    <param name="progressbar" value="true">
</applet>
</body>
</html>



注意其中的codebase="."是相对我们写的html文件位置的,因为我将html文件和WWJApplet.jar放在同一位置,所以我写的“.”
还有一步不能忘记,我们要在Test项目的web.xml文件中插入<mime-mapping>到</mime-mapping>的代码,完整web.xm;如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <mime-mapping>
      <extension>jnlp</extension>
      <mime-type>application/x-java-jnlp-file</mime-type>
 </mime-mapping>
</web-app>


到此为止,worldwind球体应该就能在浏览器中运行了

写的这么详细,是想让那些像我之前一样,为这个将worldwind部署到html上而恼火的人能够早日脱离苦海啊,最后感谢http://my.oschina.net/zhanghongbin/blog/141803这个博主给我的巨大帮助。如果有人看到我这篇博文觉得讲的不清楚, 可以参照他的文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值