您的位置:首页 > 移动开发

在html中以applet的形式展示worldwind

2014-03-22 21:18 369 查看
首先添加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这个博主给我的巨大帮助。如果有人看到我这篇博文觉得讲的不清楚, 可以参照他的文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: