Worldwind配置文档
前言:
本人在网络上各位大神的一阵阵忽悠了两天,迷迷糊糊了两天,终于在最后时刻静下心认认真真自己阅读官方的文档,完成了对
worldwind
的配置。
配置前的准备:
我使用的机器情况:
x64
的
win7
你需要配置好开发
JAVA
的环境,比如你必须安装好
JDK
,安装好
tomcat
服务器,配置好
JAVA_HOME
环境变量,需要有一个用得顺手的
IDE
(我使用的是
eclipse
,建议下载
eclipse
官方提供的
J2EE
版本的
eclipse
,不输给
myeclipse
),另外建议你的
eclipse
里面安装好
tomcat
的插件,我用的是
tomcatPluginV33
,具体的安装方法参照
google
搜索。
关于JNLP
唔,这里说明一下
JAVA
的一个新东西,
JNLP
。个人理解,以前在网页上要运行
java
的小程序,就需要用到
applet
,但是前几年因为种种原因这个东西貌似不是很受欢迎。在
java
更新几个版本以后出了一个新东西——
JNLP
。这个玩意儿是给用户提供一个富客户端,即相当于在本地有一个跟服务器版本一致的
JAVA
应用程序,第一次运行的时候可能下载会比较慢,但是之后都不需要重新加载了,而当服务器段的版本更新以后,本地端重新开启的时候则会跟着更新版本。对用户来说,这玩意儿就相当于一个指向服务器段某个程序的快捷方式。再加上
JAVA
的跨平台性,在某种程度上来说,这种方式编写的应用程序具有比网页程序更强大的功能。而且,移植以前的代码到
web
版,使用这种方法也就是个写配置文件的事情。现在
oracle
官方建议都使用
JNLP
来配置
applet
。总结下来就是:
JNLP
既能配置
applet
,也能配置好一个
web
版的应用程序,它承前启后,作用更强大,机制更安全。
准备好上述的一切以后,我们就可以开始配置
worldwind
了。有个对我影响很深的老师曾经说过:当你做一件很复杂的事情的时候,先做简单的事情,再把简单的事情一个个拼起来就没那么难了,那我的教程也遵循这个步骤吧!
搞定一个简单的 worldwind程序
一、首先在你的
eclipse
环境里面新建一个
Java Project
,直接
finish
就可以了。比如:
上图就是我刚新建好的
TeachWW
工程,里面什么都没有。
二、解压你下载好的
worldwind
源代码,需要做的只是把里面的
src
以及几个
jar
包拷到你的工程文件夹下面。如图所示:
三、现在工程是处于错误的状态,解决的方法也很简单,将几个
jar
包加到你的工程里面就不会出错了,需要注意的是,你不需要把所有的包都加载进去,如图所示,你只需加入
Referenced Libraries
下面几个包就够了:
worldwind
官方提供了很多使用他们
JDK
的例子,在
gov.nasa.worldwindx.examples
这个包下面,随便挑个
example
运行吧……然后就可以看到一个大大的地球出现在你的面前了
XD
:
如果成功的话,那就可以继续下一步的学习了,如果没成功的话,请一定成功了继续下面的步骤。
ps
:因为这个工程包括了所有的例子,所以上述几个包都要加入到工程当中,但是其他时候有些不需要的包是不用加的。
worldwind jnlp配置
配置前小序曲
在做
jnlp
之前,笔者希望你能先做一个
jnlp
的小例子,从直观上认识一下
jnlp
,这里附上我的测试过程以及代码。
swt
部分的程序我也就是网上随便找了个例子,勿喷。
新建一个工程,结构如下:
ChatGUI
部分的代码如下:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class ChatGUI extends JFrame implements ActionListener {
Container container;
JButton send; //
发送按钮
JTextArea chatContent; //
聊天内容区
JTextField sentence; //
聊天信息栏
ChatGUI() {
super.setTitle("
聊天窗口
");//
设置窗口标题
this.setSize(400, 300); //
设置窗口大小
container = this.getContentPane(); //
获得主窗口的内容面板
container.setLayout(new BorderLayout()); //
设置布局方式为
BorderLayout
JScrollPane centerPanel = new JScrollPane(); //
创建用于存放聊天记录的滚动面板
chatContent = new JTextArea(); //
创建存放聊天内容的多行文本输入区对象
centerPanel.setViewportView(chatContent); //
将文本区放入滚动面板
//
将滚动面板放到主窗口内容面板中央
container.add(centerPanel, BorderLayout.CENTER);
chatContent.setEditable(false); //
将文本区置为不可编辑状态
//
创建底部面板对象,存放聊天标签、聊天栏、发送按钮
JPanel bottomPanel = new JPanel();
sentence = new JTextField(20); //
创建文本输入行对象,存放每次的聊天内容
send = new JButton("
发送
"); //
创建按钮对象
bottomPanel.add(new JLabel("
聊天信息
")); //
将标签添加到底部面板
bottomPanel.add(sentence); //
把聊天内容栏添加到底部面板上
bottomPanel.add(send); //
把发送按钮添加到底部面板上
container.add(bottomPanel, BorderLayout.SOUTH);//
将底部面板放在主窗口的底部
send.addActionListener(this); //
注册发送按钮的动作事件
sentence.addActionListener(this); //
注册聊天栏的动作事件
this.setVisible(true); //
显示主窗口
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//
关闭窗口时退出系统
}
public void actionPerformed(ActionEvent e) {
String str = sentence.getText(); //
获取聊天栏里的聊天信息
if (str != null && !str.equals("")) //
如果聊天内容不为空,则发送信息
chatContent.append("
本人
: " + str + "\n");//
将本人发送的聊天信息追加到聊天内容区
else
chatContent.append("
聊天信息不能为空
\n");
sentence.setText(""); //
清空聊天栏里的内容
}
public static void main(String[] arg) {
new ChatGUI();
}
}
运行成功后,请将程序打包成可以运行的
jar
包。再次确认
jar
包可以双击运行
XD
。比如我打包出来的文件叫:
charTest.jar
现在,新建一个文件,文件名是可以随意定的,但是因为为了方便操作,我把文件命名为
charTest.jnlp
,
jnlp
的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!—
服务器版本
-->
<jnlp spec="1.0+" codebase="http://127.0.0.1:8080/TerryWeb" href="charTest.jnlp">
<!—
如果你是本地运行的话
<jnlp spec="1.0+" href="charTest.jnlp">
-->
<information>
<title>JNLP Test</title>
<vendor>summer</vendor>
<offline-allowed/>
</information>
<resources>
<j2se version="1.6+"/>
<jar href="charTest.jar" main="true"/>
</resources>
<application-desc
name="world street applet" main-class="ChatGUI"
width="800" height="500">
</application-desc>
<security>
<all-permissions/>
</security>
</jnlp>
根据自己的实际情况,修改
jnlp
里面的内容,如果你先不想测试服务器的版本的话,可以直接使用我注释里面的内容,另外注释掉服务器版本的部分。
在运行服务器版本之前,我们还要使用
jarsigner
工具对这些
jar
包进行签名,至于怎么签名就
google
吧
~~~
这里我运行服务器版本的部分,我将
jar
和
jnlp
文件部署到我
TerryWeb
的动态网页工程下,然后在浏览器里面输入:
http://127.0.0.1:8080/TerryWeb/charTest.jnlp
会提示下载,将下载好的
jnlp
文件打开,就可以看到和之前本地运行一样的窗口了。
配置jnlp版本的worldwind
在有之前的实践作为基础的情况下,我们新建一个工程,这次,我们选取官方例子中的
gov.nasa.worldwindx.examples.view.ViewSwitch.java
这个例子,如图所示:
代码我就不贴了。老规矩,成功运行以后就打包成可运行的
jar
包,在打包的时候注意选择:
这样就会把依赖的
jar
包打包在和
jar
文件同一个目录下的一个文件夹下面了,运行打包好的
jar
包,发现不能运行,
XDD
,这里就要说明一下了,
gluegen-rt.jar
,
jogl-all.jar
这两个包有点像索引的意思,它们会根据你系统的不同选择不同的
jar
包,那么我们只要把其他平台下的
gluegen
和
jogl
的
jar
包复制到该文件夹下就可以了,如图所示,
现在你的
jar
包应该就可以运行了……
然后,跟之前一样,写一个
jnlp
文件,内容跟之前有所不同,但是是个程序员一定都能看懂,贴代码:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://127.0.0.1:8080/TerryWeb" href="ViewSwitch.jnlp">
<information>
<title>ViewSwitch</title>
<vendor>summer</vendor>
<offline-allowed/>
</information>
<resources>
<j2se version="1.6+"/>
<jar href="ViewSwitch.jar" main="true"/>
<jar href="ViewSwitch_lib/jogl-all.jar"/>
<jar href="ViewSwitch_lib/gluegen-rt.jar"/>
<jar href="ViewSwitch_lib/worldwind.jar"/>
<jar href="ViewSwitch_lib/worldwindx.jar"/>
</resources>
<application-desc
name="world street applet" main-class="gov.nasa.worldwindx.examples.view.ViewSwitch"
width="800" height="500">
</application-desc>
<security>
<all-permissions/>
</security>
</jnlp>
老规矩,如果要运行服务器版本,请先用
jarsigner
工具将所有的
jar
包签名一下,然后部署到你的服务器上,现在好
jnlp
文件以后,你就又可以看到大地球了!!