精华内容
下载资源
问答
  • 实验的目的: 1) 掌握Java Socket编程应用; 2) 阅读HTTP协议相关规范; 3) 基于Java Socket构建简单的HTTP的客户端和服务器; 4) 构建支持并发的HTTP服务器。
  • 使用JAVA程序操作FTP服务器

    千次阅读 2017-01-17 00:40:26
    1、JAVA程序查看ftp下所有目录文件夹(局域网) 2、JAVA程序通过ftp传文件到电脑(局域网) 3、JAVA程序通过ftp传文件到手机(局域网) FTPClient API

    使用JAVA程序操作FTP服务器

    注:

    • 一切操作都会在Linux下进行
    • 端口可能会被拒绝,教程中默认关闭防火墙,需要开防火墙请添加端口规则

    开始之前需要做2件事:

    • 1、模拟一个FTP服务器 。

    http://blog.csdn.net/gfd54gd5f46/article/details/53932028#t1

    • 2、引用JAR包进行编译。

        本教程同样要使用Jar包,如果不会使用,请先阅读:

    如何使用jar包 :http://blog.csdn.net/gfd54gd5f46/article/details/54578347


    1、 JAVA程序查看ftp下的所有文件夹(局域网)


    首先创建一个FtpDemo.java的文件

    vi FtpDemo.java



    • 源码:
    import java.io.IOException;
    import java.net.SocketException;
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import java.nio.charset.Charset;
    import java.io.*;
    public class FtpDemo{
    
        /*
           获取FTP服务器上所有的目录
        */
            public static void conn(){
                    //初始化FTP客服端
                    FTPClient ftp = new FTPClient();
                    try{
                            //通过IP跟端口进行连接
                            //192.168.20.111 是我FTP服务器的IP,你需要换成你自己的
                            ftp.connect("192.168.20.111",21);
    
                            //登录名,密码
                            ftp.login("lingdu","123");
    
                            //设置编码
                            ftp.setCharset(Charset.forName("UTF-8"));
                            ftp.setControlEncoding("UTF-8");
    
                            //获取目录列表存放在数组中
                            FTPFile files[] = ftp.listDirectories();
                            for(int i = 0; i < files.length; i++){
                                    FTPFile file = files[i];
    
                                    //获取文件名
                                    String fileName = file.getName();
    
                                    //打印文件名
                                    System.out.println(fileName);
                            }
                    }catch(SocketException e){
                            e.printStackTrace();
                    }catch(IOException e){
                            e.printStackTrace();
                    }finally{
                            try{
                                    Thread.sleep(500);
                            }catch(InterruptedException e1){
                                    e1.printStackTrace();
                            }
                            try{
                                    ftp.abor();
                            }catch(IOException e){
                                    e.printStackTrace();
                            }
                    }
            }
    
            public static void main(String args[]){
                    conn();
            }
    }


    还需要下载一个jar包:

    链接:http://pan.baidu.com/s/1cuz7T8 密码:y8v6

    1


    注:我把Jar包跟源文件放在同一目录下

    编译:

    javac -cp .:commons-net-3.5.jar FtpDemo.java

    运行:

    java -cp .:commons-net-3.5.jar FtpDemo

    2

    已经成功获取到FTP服务器下的所有文件夹了。




    2、JAVA程序通过ftp传文件到电脑(局域网)


    这时需要改造一下代码了:

    • 源码
    import java.io.IOException;
    import java.net.SocketException;
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import java.nio.charset.Charset;
    import java.io.*;
    public class FtpDemo{
    
            /*
               上传文件到FTP服务器
            */
            public static void conn(){
                    //初始化FTP客服端
                    FTPClient ftp = new FTPClient();
                    try{
                            //通过IP跟端口进行连接
                            ftp.connect("192.168.20.137",2121);
    
                            //登录名,密码
                            ftp.login("anonymous","123456");
    
                            //设置编码
                            ftp.setCharset(Charset.forName("UTF-8"));
                            ftp.setControlEncoding("UTF-8");     
    
                //将本地文件上传到FTP服务器的方法(fileName,filePath)        
                ftp.storeFile("/FtpDemo.java.bak",new FileInputStream("/home/lingdu/Desktop/javaCode/test/FtpDemo.java.bak"));
    
                System.out.rpintln("上传成功!");                    
    
            }catch(SocketException e){
    
                            e.printStackTrace();
                    }catch(IOException e){
    
                            e.printStackTrace();
                    }finally{
    
                            try{
                                    Thread.sleep(500);
                            }catch(InterruptedException e1){
                                    e1.printStackTrace();
                            }
                            try{
                                    ftp.abor();
                            }catch(IOException e){
                                    e.printStackTrace();
                            }
                    }
            }
    
            public static void main(String args[]){
                    conn();
            }
    }


    作为测试,我们把当前目录下的FtpDemo.java.bak文件上传到FTP服务器上

    3

    编译:

    javac -cp .:commons-net-3.5.jar FtpDemo.java

    运行:

    java -cp .:commons-net-3.5.jar FtpDemo


    上传成功。

    4


    然后我们去FTP服务器看看是否有这个文件存在。

    • 可以使用命令行的ftp工具,也可以使用Linux自带的可视化工具
    • 这里直接使用Linux自带的可视化工具连接FTP查看
    • 我使用的Linux系统是带界面的。

    5


    选择FTP(with login)

    填写主机名:你自己的主机名

    6


    填写用户名和密码

    6


    Conncet之后就能看到ftp文件夹了

    此时我们看到已经上传到FTP服务器了。

    7

    3、JAVA程序通过ftp传文件到手机(局域网)


    前期准备:


    1、手机下载FTP服务器


    到应用商店下载一个FTP服务器,有很多版本,随便下载一个就可以

    8


    然后创建一个用户名和密码

    9


    开启服务就可以了



    第一台手机测试上传到 魅族手机上。

    10

    第二台手机测试上传到 小米手机上

    11



    2、引用JAR包进行编译。


    我们继续改造一下代码:

    • 源码:
    import java.io.IOException;
    import java.net.SocketException;
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import java.nio.charset.Charset;
    import java.io.*;
    public class FtpDemo {
    
        /*
           通过FTP传文件到手机
        */
        public static void test() {
            //定义一个二位数组存放ip跟端口
            //我这里使用两台手机进行测试(同时传文件到两台手机上)
            String ips[][] = { 
                        { "192.168.20.211", "2121" }, 
                        { "192.168.20.166", "2121" } 
                     };
    
            //初始化FTP客服端
            FTPClient ftp = new FTPClient();
    
            //遍历二维数组
            for (int i = 0; i < ips.length; i++) {
                try {
                    //通过ip和端口连接FTP服务器,因为端口是整型数据,所以需要强制类型转换一下
                    ftp.connect(ips[i][0], Integer.parseInt(ips[i][1]));
    
                    //手机端设置的FTP服务器的 用户名和密码
                    //帐号密码我统一设置成一样的,方便测试
                    ftp.login("root", "123456");
    
                    //设置编码
                    ftp.setCharset(Charset.forName("UTF-8"));
                    ftp.setControlEncoding("UTF-8");
    
                    //传输文件 fileName,filePath 
                    ftp.storeFile("/FtpDemo.java.bak",new FileInputStream
                ("/home/lingdu/Desktop/javaCode/test/FtpDemo.java.bak"));
    
                    //屏幕打印结果
                    System.out.println("ip:" + ips[i][0] + "-------- yes");
                } catch (SocketException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e1) {
                        e1.printStackTrace();
                    }
                    try {
                        //关闭服务
                        ftp.abor();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        public static void main(String args[]) {
            test();
        }
    }

    编译:

    javac -cp .:commons-net-3.5.jar FtpDemo.java


    注:编译的时候报错:

    • 说明没有使用超级管理员权限

    12



    运行:

    java -cp .:commons-net-3.5.jar FtpDemo

    13


    然后同样我们去手机上确认一下:注意端口号是手机上FTP的端口号,我这里是:
    2121

    14

    15


    确实把文件上传到手机上了。

    16


    使用手机上的Ex文件浏览器查看一下:

    17

    也确实上传上来了。



    当然,FTP的功能不止这些

    • 例如:删除,创建,下载,等等。。。。。这里就不一一做说明了


    具体可以浏览API文档:FTPClient (Apache Commons Net 3.5 API)

    http://commons.apache.org/proper/commonsnet/apidocs/org/apache/commons/net/ftp/FTPClient.html


    也可以把FTPClient.java源码导出来在Eclipse下浏览:


    源码下载地址:

    链接:http://pan.baidu.com/s/1cuz7T8 密码:y8v6

    18

    展开全文
  • 外包服务Java

    2014-08-05 13:10:53
    外包服务JavaJava被广泛地用于Web开发的应用程序。它提供了有效的可移植性和可扩展性,以满足使用Internet人们日益增长的需求。仅举少数人能玩网络游戏,闲聊与他们的朋友,同事或生意伙伴,计算按揭利息,或看...
    外包服务的Java   的Java被广泛地用于Web开发的应用程序。它提供了有效的可移植性和可扩展性,以满足使用Internet人们日益增长的需求。仅举少数人能玩网络游戏,闲聊与他们的朋友,同事或生意伙伴,计算按揭利息,或看看3维图像。 Java技术已经能够提供:   *多功能*高效*安全和网络*平台的可移植性在发达国家专业费用使得Java应用软件的高额费用。但在发展中国家,如印度的Java服务,供应商可以收费相当少而不包括有关质量。部分原因要提前和外包的java服务厂商合作,包括:   *经济的解决方案?有许多公司用Java开发服务,有竞争力的成本提供。因此,您可以选择适合您的需求以及之一。   *懂行的人才?知识就是力量。同样的事情也适用于Java开发人员。他们是专家,了解工作的质量和时效性的重要性。因此,你可以完全依赖它们来获得高质量的输出。他们构建,管理和促进客户的业务,让他们可以牟取高额利润。   *战略方针:谁是处理你的工作外包战略,公司致力于降低客户成本,适度的风险,并建议必要的解决方案。   *完整的测试和风险分析:在最终产品和服务的交付,他们完全在功能,性能和完整性进行评估。   为了更多地了解公司提供外包java的服务,请访问:应用开发使用Java java开发印度
    展开全文
  • JAVA_API1.6文档(中文)

    万次下载 热门讨论 2010-04-12 13:31:34
    java.awt.geom 提供用于在与二几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的...
  • 利用这个应用,我们可以架设自己的WMS服务并使用自己的数据(也支持缓存转发),这样开发的应用就不必依赖于互联网连接,也可以抛开NASA提供的数据源而独立运行。 1、准备工作 运行WWS服务器需要JDK、JOGL、GDAL包...

    在提供地理信息系统客户端时,NASA还为用户提供了开源的WMS Server 服务器应用:World Wind WMS Server。利用这个应用,我们可以架设自己的WMS服务并使用自己的数据(也支持缓存转发),这样开发的应用就不必依赖于互联网连接,也可以抛开NASA提供的数据源而独立运行。

    1、准备工作

    运行WWS服务器需要JDK、JOGL、GDAL包以及World Wind Server压缩包。资源已上传至 WorldWind Java配置WMS服务器,请自行下载。

    2、安装JDK

    随便一搜都有,不在赘述

    3、安装FWTools

    一直默认安装即可完成。

    4、安装JOGL

    将jogl-1.1.1a-windows-i586.zip中的jogl.dll、jogl_awt.dll、jogl_cg.dll和gluegen-rt.dll复制到一下两个目录。
    X:\Program Files (x86)\Java\jdk1.7.0_09\jre\bin:支持客户机和服务器应用运行
    D:\Program Files (x86)\Java\jdk1.7.0_09\bin:支持eclipse开发。

    5、安装和配置World Wind Server。

    将worldWind-wms-0.6.dev.zip解压,目录如下图所示。

    用文本编辑器打开WEB-INF目录下的web.xml文件,修改初始配置。

    配置文件如下图所示。

    运行World Wind WMS Server,如下图所示:
    如果运行结果为fine,表示WMSServer可以正常运行了。


    测试:打开浏览器,输入如下图所示信息,若能看到XL文件,则表明WMSServer已经正常工作了
    展开全文
  • Logging.logger().log(java.util.logging.Level.SEVERE, message, e); } if (layer == null) return; layer.setEnabled(true); // 设置图层可见 // 添加至WW if (!getWorldWindowGLCanvas()....

    上一篇博客主要是针对小文件直接导入WW中显示,然而当文件特别大时,这种方式就不太可行。因此要将大文件切片,生成本地缓存,WW可以加载本地缓存文件,保障浏览场景时的流畅性。

    1、使用Global Mapper生成WW缓存切片

    使用Global Mapper生成WW缓存切片的步骤已上传至 使用GlobalMapper生成WW缓存切片,这里不再赘述。生成后的切片可以放在任意文件夹下,目前参考了WWJ自带的例子 InstallImageryAndElevationsDemo, 暂时将数据放在C:\ProgramData\WorldWindInstalled目录下,如下图所示。

    生成的XML文件修改如下:

    2、参照InstallImageryAndElevationsDemo示例实现缓存文件的初始化加载

    未多做修改,写了一个加载缓存数据的类LoadCacheData,代码如下所示。
    /**
     * @Copyright 2014-2020 @奔跑的鸡丝
     **/
    
    package edu.whu.vge.util;
    
    import edu.whu.vge.util.JavaCheckBoxTree.CheckBoxTreeNode;
    import gov.nasa.worldwind.Factory;
    import gov.nasa.worldwind.WorldWind;
    import gov.nasa.worldwind.avlist.AVKey;
    import gov.nasa.worldwind.avlist.AVList;
    import gov.nasa.worldwind.avlist.AVListImpl;
    import gov.nasa.worldwind.awt.WorldWindowGLCanvas;
    import gov.nasa.worldwind.cache.FileStore;
    import gov.nasa.worldwind.exception.WWRuntimeException;
    import gov.nasa.worldwind.geom.Sector;
    import gov.nasa.worldwind.globes.Earth;
    import gov.nasa.worldwind.globes.ElevationModel;
    import gov.nasa.worldwind.layers.Layer;
    import gov.nasa.worldwind.terrain.CompoundElevationModel;
    import gov.nasa.worldwind.util.DataConfigurationFilter;
    import gov.nasa.worldwind.util.DataConfigurationUtils;
    import gov.nasa.worldwind.util.Logging;
    import gov.nasa.worldwind.util.WWIO;
    import gov.nasa.worldwind.util.WWXML;
    
    import java.awt.Component;
    import java.io.File;
    
    import javax.swing.JTree;
    import javax.swing.SwingUtilities;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.xml.xpath.XPath;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    
    /**
     * @项目名称:GF_ZHJCYPG
     * @类名称:LoadCacheData
     * @类描述: 加载缓存数据
     * @创建人:奔跑的鸡丝
     * @创建时间:2014-12-19 下午4:30:49
     * @修改备注:
     * @版本:
     */
    
    public class LoadCacheData
    {
    	private static WorldWindowGLCanvas worldWindowGLCanvas;
    	private static JTree layerJTree;
    
    	/**
    	 * 
    	 * 创建一个新的实例 LoadCacheData.
    	 * 
    	 * @param worWindowGLCanvas
    	 */
    	public LoadCacheData(WorldWindowGLCanvas worWindowGLCanvas, JTree jTree)
    	{
    		LoadCacheData.setWorldWindowGLCanvas(worWindowGLCanvas);
    		LoadCacheData.setLayerJTree(jTree);
    	}
    
    	/**
    	 * 
    	 * @方法名称: loadPreviouslyInstalledData ;
    	 * @方法描述: 加载已有的缓存文件 ;
    	 * @参数 :
    	 * @返回类型: void ;
    	 * @创建人:奔跑的鸡丝 ;
    	 * @创建时间:2014-12-19 下午7:06:09;
    	 * @throws
    	 */
    	public void loadPreviouslyInstalledData()
    	{
    
    		Thread thread = new Thread(new Runnable()
    		{
    
    			@Override
    			public void run()
    			{
    				// TODO Auto-generated method stub
    				loadInstalledDataFromFileStore(WorldWind.getDataFileStore());
    			}
    		});
    		thread.start();
    	}
    
    	/**
    	 * 
    	 * @方法名称: loadInstalledDataFromFileStore ;
    	 * @方法描述: TODO ;
    	 * @参数 :@param fileStore
    	 * @返回类型: void ;
    	 * @创建人:奔跑的鸡丝 ;
    	 * @创建时间:2014-12-19 下午7:06:42;
    	 * @throws
    	 */
    	protected void loadInstalledDataFromFileStore(FileStore fileStore)
    	{
    		// 便利已有的缓存文件
    		for (File file : fileStore.getLocations())
    		{
    			// 文件存在并且是缓存文件目录
    			if (file.exists() && fileStore.isInstallLocation(file.getPath()))
    			{
    				System.out.println(file.getPath());
    				loadInstalledDataFromDirectory(file);
    			}
    
    		}
    	}
    
    	/**
    	 * 
    	 * @方法名称: loadInstalledDataFromDirectory ;
    	 * @方法描述: 从文件目录加载缓存数据 ;
    	 * @参数 :@param dir
    	 * @返回类型: void ;
    	 * @创建人:奔跑的鸡丝 ;
    	 * @创建时间:2014-12-19 下午7:43:36;
    	 * @throws
    	 */
    	private void loadInstalledDataFromDirectory(File dir)
    	{
    		/**
    		 * 获取缓存文件xml配置文件的在缓存文件目录的相对目录,如Landsat\Landsat.xml
    		 */
    		String[] names = WWIO.listDescendantFilenames(dir,
    				new DataConfigurationFilter(), false);
    		if (names == null || names.length == 0)
    			return;
    
    		for (String filename : names)
    		{
    			Document doc = null;
    
    			try
    			{
    				// 根据缓存文件XML描述文件创建Document对象
    				File dataConfigFile = new File(dir, filename);
    				doc = WWXML.openDocument(dataConfigFile);
    				doc = DataConfigurationUtils.convertToStandardDataConfigDocument(doc);
    			}
    			catch (WWRuntimeException e)
    			{
    				e.printStackTrace();
    			}
    
    			if (doc == null)
    				continue;
    
    			// 由于数据配置文件来自于已有的文件,因此不能保证它是由当前版本WW's Installer
    			// 产生的。可能是由之前版本或其他应用程序产生的,因此要为可能缺失的参数设置备用值(这些参数需要用来构建图层或高程模拟)
    			AVList params = new AVListImpl();
    			setFallbackParams(doc, filename, params);
    			// 添加数据
    			addInstalledData(doc, params);
    		}
    	}
    
    	/**
    	 * 
    	 * @方法名称: setFallbackParams ;
    	 * @方法描述: 设置备用参数值 ;
    	 * @参数 :@param dataConfig :数据配置XML文件
    	 * @参数 :@param filename :文件名
    	 * @参数 :@param params :参数列表
    	 * @返回类型: void ;
    	 * @创建人:奔跑的鸡丝 ;
    	 * @创建时间:2014-12-20 下午12:21:03;
    	 * @throws
    	 */
    	private void setFallbackParams(Document dataConfig, String filename,
    			AVList params)
    	{
    		XPath xpath = WWXML.makeXPath();
    		Element domElement = dataConfig.getDocumentElement();
    
    		// If the data configuration document doesn't define a cache name, then
    		// compute one using the file's path
    		// relative to its file cache directory.
    		String s = WWXML.getText(domElement, "DataCacheName", xpath);
    		if (s == null || s.length() == 0)
    			DataConfigurationUtils.getDataConfigCacheName(filename, params);
    
    		// If the data configuration document doesn't define the data's extreme
    		// elevations, provide default values using
    		// the minimum and maximum elevations of Earth.
    		String type = DataConfigurationUtils.getDataConfigType(domElement);
    		if (type.equalsIgnoreCase("ElevationModel"))
    		{
    			if (WWXML.getDouble(domElement, "ExtremeElevations/@min", xpath) == null)
    				params.setValue(AVKey.ELEVATION_MIN, Earth.ELEVATION_MIN);
    			if (WWXML.getDouble(domElement, "ExtremeElevations/@max", xpath) == null)
    				params.setValue(AVKey.ELEVATION_MAX, Earth.ELEVATION_MAX);
    		}
    	}
    
    	/**
    	 * 
    	 * @方法名称: addInstalledData ;
    	 * @方法描述: 添加缓存数据 ;
    	 * @参数 :@param dataConfig
    	 * @参数 :@param params
    	 * @返回类型: void ;
    	 * @创建人:奔跑的鸡丝 ;
    	 * @创建时间:2014-12-20 下午12:22:29;
    	 * @throws
    	 */
    	private void addInstalledData(final Document dataConfig, final AVList params)
    	{
    		if (!SwingUtilities.isEventDispatchThread())
    		{
    			SwingUtilities.invokeLater(new Runnable()
    			{
    				public void run()
    				{
    					addInstalledData(dataConfig, params);
    				}
    			});
    		}
    		else
    		{
    			addInstalledCacheData(dataConfig.getDocumentElement(), params);
    		}
    
    	}
    
    	/**
    	 * 
    	 * @方法名称: addInstalledCacheData ;
    	 * @方法描述: 添加已有缓存数据 ;
    	 * @参数 :@param domElement :数据XML描述文件
    	 * @参数 :@param params :参数列表
    	 * @返回类型: void ;
    	 * @创建人:奔跑的鸡丝 ;
    	 * @创建时间:2014-12-19 下午8:02:21;
    	 * @throws
    	 */
    	public void addInstalledCacheData(final Element domElement,
    			final AVList params)
    	{
    		if (domElement == null)
    		{
    			String message = Logging.getMessage("nullValue.DocumentIsNull");
    			Logging.logger().severe(message);
    			throw new IllegalArgumentException(message);
    		}
    
    		String description = getDescription(domElement); // 图层名称
    		Sector sector = getSector(domElement); // 图层范围
    		System.out.println(description);
    		System.out.println(sector);
    		addToWorldWindow(domElement, params);
    
    	}
    
    	/**
    	 * 
    	 * @方法名称: addToWorldWindow ;
    	 * @方法描述: 将缓存文件加入WW ;
    	 * @参数 :@param domElement
    	 * @参数 :@param params
    	 * @返回类型: void ;
    	 * @创建人:奔跑的鸡丝 ;
    	 * @创建时间:2014-12-19 下午4:44:08;
    	 * @throws
    	 */
    	private void addToWorldWindow(Element domElement, AVList params)
    	{
    		String type = DataConfigurationUtils.getDataConfigType(domElement);
    		if (type == null)
    			return;
    
    		if (type.equalsIgnoreCase("Layer"))
    		{
    			addLayerToWorldWindow(domElement, params);
    		}
    		else if (type.equalsIgnoreCase("ElevationModel"))
    		{
    			addElevationModelToWorldWindow(domElement, params);
    		}
    	}
    
    	/**
    	 * 
    	 * @方法名称: addLayerToWorldWindow ;
    	 * @方法描述: 向WW中添加图层 ;
    	 * @参数 :@param domElement
    	 * @参数 :@param params
    	 * @返回类型: void ;
    	 * @创建人:奔跑的鸡丝 ;
    	 * @创建时间:2014-12-19 下午4:45:06;
    	 * @throws
    	 */
    	private void addLayerToWorldWindow(Element domElement, AVList params)
    	{
    		Layer layer = null;
    		try
    		{
    			// Factory创建的图层默认是不可见的
    			Factory factory = (Factory) WorldWind.createConfigurationComponent(AVKey.LAYER_FACTORY);
    			layer = (Layer) factory.createFromConfigSource(domElement, params);
    		}
    		catch (Exception e)
    		{
    			String message = Logging.getMessage(
    					"generic.CreationFromConfigurationFailed",
    					DataConfigurationUtils.getDataConfigDisplayName(domElement));
    			Logging.logger().log(java.util.logging.Level.SEVERE, message, e);
    		}
    
    		if (layer == null)
    			return;
    		layer.setEnabled(true); // 设置图层可见
    
    		// 添加至WW
    		if (!getWorldWindowGLCanvas().getModel().getLayers().contains(layer))
    		{
    			getWorldWindowGLCanvas().getModel().getLayers().add(layer);
    			// System.out.println(pLayerTree.getModel().getRoot().toString());
    			Object rootObject = layerJTree.getModel().getRoot();
    			if (!layerJTree.getModel().isLeaf(rootObject))
    			{
    				int count = layerJTree.getModel().getChildCount(rootObject);
    				for (int i = 0; i < count; i++)
    				{
    					String childNodeNameString = layerJTree.getModel().getChild(
    							rootObject, i).toString();
    					if (childNodeNameString.equals("影像图层"))
    					{
    						((DefaultMutableTreeNode) layerJTree.getModel().getChild(
    								rootObject, i)).add(new CheckBoxTreeNode(
    								layer.getName()));
    						layerJTree.updateUI();
    					}
    				}
    			}
    
    		}
    	}
    
    	/**
    	 * 
    	 * @方法名称: addElevationModelToWorldWindow ;
    	 * @方法描述: 添加高程图层 ;
    	 * @参数 :@param domElement
    	 * @参数 :@param params
    	 * @返回类型: void ;
    	 * @创建人:奔跑的鸡丝 ;
    	 * @创建时间:2014-12-19 下午4:51:37;
    	 * @throws
    	 */
    	private void addElevationModelToWorldWindow(Element domElement,
    			AVList params)
    	{
    		ElevationModel em = null;
    		try
    		{
    			Factory factory = (Factory) WorldWind.createConfigurationComponent(AVKey.ELEVATION_MODEL_FACTORY);
    			em = (ElevationModel) factory.createFromConfigSource(domElement,
    					params);
    		}
    		catch (Exception e)
    		{
    			String message = Logging.getMessage(
    					"generic.CreationFromConfigurationFailed",
    					DataConfigurationUtils.getDataConfigDisplayName(domElement));
    			Logging.logger().log(java.util.logging.Level.SEVERE, message, e);
    		}
    
    		if (em == null)
    			return;
    
    		ElevationModel defaultElevationModel = getWorldWindowGLCanvas().getModel().getGlobe().getElevationModel();
    		if (defaultElevationModel instanceof CompoundElevationModel)
    		{
    			if (!((CompoundElevationModel) defaultElevationModel).containsElevationModel(em))
    				((CompoundElevationModel) defaultElevationModel).addElevationModel(em);
    		}
    		else
    		{
    			CompoundElevationModel cm = new CompoundElevationModel();
    			cm.addElevationModel(defaultElevationModel);
    			cm.addElevationModel(em);
    			getWorldWindowGLCanvas().getModel().getGlobe().setElevationModel(cm);
    		}
    	}
    
    	/**
    	 * 获取缓存文件类型 获取缓存配置文件描述:是Layer或者是Elevation
    	 * 
    	 * @方法名称: getDescription ;
    	 * @方法描述: TODO ;
    	 * @参数 :@param domElement
    	 * @参数 :@return
    	 * @返回类型: String ;
    	 * @创建人:奔跑的鸡丝 ;
    	 * @创建时间:2014-12-19 下午4:53:26;
    	 * @throws
    	 */
    	private String getDescription(Element domElement)
    	{
    		String displayName = DataConfigurationUtils.getDataConfigDisplayName(domElement);
    		String type = DataConfigurationUtils.getDataConfigType(domElement);
    
    		StringBuilder sb = new StringBuilder(displayName);
    
    		if (type.equalsIgnoreCase("Layer"))
    		{
    			sb.append(" (Layer)");
    		}
    		else if (type.equalsIgnoreCase("ElevationModel"))
    		{
    			sb.append(" (Elevations)");
    		}
    
    		return sb.toString();
    	}
    
    	/**
    	 * 获取图层范围
    	 * 
    	 * @方法名称: getSector ;
    	 * @方法描述: TODO ;
    	 * @参数 :@param domElement
    	 * @参数 :@return
    	 * @返回类型: Sector ;
    	 * @创建人:奔跑的鸡丝 ;
    	 * @创建时间:2014-12-19 下午4:54:17;
    	 * @throws
    	 */
    	protected static Sector getSector(Element domElement)
    	{
    		return WWXML.getSector(domElement, "Sector", null);
    	}
    
    	public static WorldWindowGLCanvas getWorldWindowGLCanvas()
    	{
    		return worldWindowGLCanvas;
    	}
    
    	public static void setWorldWindowGLCanvas(
    			WorldWindowGLCanvas worldWindowGLCanvas)
    	{
    		LoadCacheData.worldWindowGLCanvas = worldWindowGLCanvas;
    	}
    
    	public JTree getLayerJTree()
    	{
    		return layerJTree;
    	}
    
    	public static void setLayerJTree(JTree layerJTree)
    	{
    		LoadCacheData.layerJTree = layerJTree;
    	}
    
    }
    

    3、高程数据的加载

    高程数据采用NASA的30m公开DEM数据,使用World Wind Server发布即可,详见前面的搭建本地World wind Severe服务器。最终实现效果图如下图所示。

    PS:年末各种忙啊,项目总算结题,明天小组年会,预祝一切顺利!欢迎大家留言交流,共享自己的学习笔记。
    World Wind Java的资料实在太少啦,断断续续总算搭建起了三维框架,后面陆续添加功能,计划做一个基于新安江模型的洪涝模拟仿真模块,将之前做的洪涝模拟和参数率定、径流模拟全部整合到自己的这个平台上来。
    ---------------------------------分割线(2015年1月13日)-----------------------------------
    补充:关于LoadCacheData的使用,只需在程序初始化时加入以下两句代码即可:
    // 加载缓存数据
    			LoadCacheData loadCacheData = new LoadCacheData(wGlCanvas,
    					layerJTree);
    			loadCacheData.loadPreviouslyInstalledData();
    其中layerJTree是图层树,大家可以不要这个参数,修改相应代码即可,另外如何测试自己的切片数据是否加载成功,可以参考示例中的InstallImageryAndElevationsDemo这个。可能有些朋友不知如何运行自带的示例,下面我贴图说明下哈(假设已添加Worldwind.jar文件,并且已使用GlobalMapper切片放置C:\ProgramData\WorldWindInstalled文件夹下)



    如果结果如上图所示,说明数据已加载成功。如果还未成功,检查缓存数据xml配置文件是否正确,可以跟一下源代码看下是如何加载缓存数据的。
    PS:另外,最近期末考试,再加上其他项目的事情,更新有些慢哈。后面会陆续更新,欢迎大家留言交流!

    展开全文
  • java服务器编程——log4j日志

    千次阅读 2016-08-27 13:31:11
    一、引入log4j包对于mvn构建的java工程,在pom.xml文件中引入如下配置: <groupId>log4j <artifactId>log4j <version>1.2.16 二、配置log4j.xml文件log4j.xml文件放在工程的资源目录下,配
  • 数组 二数组常见初始化格式 二数组练习 面向对象 面向对象思想 如何更符合面向对象思想 面向对象开发设计特征 类 一个对象的内存图 两个对象的内存图 三个对象的内存图
  • import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.*; import java.s
  • Java API

    千次阅读 2016-06-01 14:38:19
    Java语言的强大功能主要体现在Java语言完备丰富、功能强大的Java API上。本章介绍Java API的基本结构以及语言包和实用包中的常用类。 1、Java API 综述   Java语言的内核非常小,Java语言的强大功能主要体现在...
  • Java 高级编程: 打印  Java Pro Programming: Printing    学习如何使用打印服务 API  ...关键词: Java ...从较高层次上来看,使用 Java 打印服务 API 的步骤是很简单的:    1. 定位打印服务
  • tensorflow serving 服务部署与访问(Python + Java

    万次阅读 热门讨论 2017-11-21 15:00:24
    Tensorflow Serving 服务docker部署 Tensorflow Serving 模型生成与部署 Python grpc 对Tensorflow Serving服务调用 Java grpc 对Tensorflow Serving服务调用
  • 通过Java客户端访问Web时,session信息的保存问题。通过浏览器访问Web,浏览器自动管理Http连接的的session信息,如果通过Java连接,比如HttpURLConnection,就需要...我们希望java客户端能像浏览器一样,每次请求都
  • Java的第20年:Java和我的故事

    万次阅读 多人点赞 2015-03-29 06:42:12
    今年是Java诞生的第20年,写这样的一篇文章纪念那个曾经让我执着和疯狂的Java,也纪念那个从单纯到迷茫再回归单纯的我。
  • 用于查询与名为Jabber的伪社交媒体相关的PostgreSQL数据库的Java服务器。 该程序使用JDBC API与数据库建立连接。 程序的用户可以从main调用方法以执行具有不同参数的各种查询。 查询被发送到数据库,结果关系存储在...
  • java Graphics2D绘制文字并居中并解决服务器乱码问题

    万次阅读 多人点赞 2017-06-08 10:04:41
    它是用于在 Java(tm) 平台上呈现二形状、文本和图像的基础类。一、在图片上绘制文字实例代码:package com.test.testImage;import java.awt.Color; import java.awt.Font; import java.awt.Font
  • JAVA

    千次阅读 2010-04-20 16:08:00
    Java,是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(Sun Microsystems)公司的詹姆斯·高斯林(James Gosling)等人于1990年代初开发。它最初被命名为Oak,目标设定在家用电器等小型系统的编程...
  • Java学习路线(完整详细版)超详细

    万次阅读 多人点赞 2019-05-14 10:56:47
    一门永不过时的编程语言——Java 软件开发。 Java编程语言占比: 据官方数据统计,在全球编程语言工程师的数量上,Java编程语言以1000万的程序员数量位居首位。 而且很多软件的开发都离不开Java编程,因此其程序员...
  • 定义一个长度为[16][16]的整型二数组并输入所有位置的元素值, 分别实现二数组中所有行和所有列中所有元素的累加和并打印。 再分别实现二数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。...
  • 数据是GIS的核心,没有数据一切无从谈起,Internet上有很多在线WMS地图服务资源,我们可以好好利用这些数据资源,比如天地图、必应地图、NASA、OGC数据服务等等。 在我们国家常用的还是天地图的地图服务资源,详见:...
  • Java基础

    千次阅读 2017-05-30 14:32:27
    Java基础、Java安装、Java环境配置、Java面向对象
  •        在SuperMap iServer产品中封装了大部分的GIS功能,比如基本的地图功能、二三...本文将重点介绍使用iserver REST API和SuperMap iObjects for Java(以下简称Java组件)来...
  • 一门永不过时的编程语言——Java 软件开发 java难学吗 java不难,你可以做如下学习 一、到相应的培训机构付费学习 别在这说培训机构没用什么的,不过一定要找正规的培训机构,不然容易被坑。培训机构里面的课程都是...
  • 什么是JAVA

    千次阅读 2009-04-21 14:03:00
    先说什么是javajava是一种面向对象语言,真正的面向对象,任何函数和变量都以类(class)封装起来至于什么是对象什么是类,我就不废话了关于这两个概念的解释任何一本面向对象语言的教材里面都有知道了什么是java,那...
  • 说说java

    千次阅读 2012-08-26 01:10:24
    先说什么是java java是一种面向对象语言,真正的面向对象,任何函数和变量都以类(class)封装起来 至于什么是对象什么是类,我就不废话了 关于这两个概念的解释任何一本面向对象语言的教材里面都有 ...
  • 精通Java JDK

    热门讨论 2009-06-27 20:03:50
    DoubleArray.java数组的使用 ArrayListDemo.java ArrayList的使用 LinkedListDemo.java LinkedList的使用 VectorDemo.java Vector数组的使用 MapDemo.java Map的使用 HashtableDemo.java Hashtable的...
  • WorldWind图层类(3)-WMSTiledImageLayer类 发表于2013年11月8日 ...这一篇我们将使用《OSM数据插入PostGIS数据库为GeoServer提供数据》中发布的WMS服务来完成WMSTiledImageLayer的简单测试。 一个WM
  • 何谓java

    千次阅读 2011-08-14 10:13:02
    先说什么是java java是一种面向对象语言,真正的面向对象,任何函数和变量都以类(class)封装起来 至于什么是对象什么是类,我就不废话了 关于这两个概念的解释任何一本面向对象语言的教材里面都有 知道...
  • java api最新7.0

    千次下载 热门讨论 2013-10-26 17:34:06
    java.awt.geom 提供用于在与二几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的接口...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,075
精华内容 15,630
关键字:

java维服务

java 订阅