---> 不支持多线程

---> 依赖32位jdk,windows 和jna.jar

---> 依赖 XLDownload.dll, zlib1.dll  放置项目跟目录。不是src下,可以为绝对路径

package com.leunpha;

import com.sun.jna.Native;

import com.sun.jna.NativeLong;

import com.sun.jna.WString;

import com.sun.jna.ptr.LongByReference;

import com.sun.jna.ptr.NativeLongByReference;

import com.sun.jna.win32.StdCallLibrary;

import java.util.*;

import java.util.concurrent.*;

import java.util.concurrent.atomic.AtomicInteger;

public class XLDownLoader {

String FileName;

String Url;

long task;

/**

*

* @param FileName saved file path

* @param Url pre-downloaded url

* @param task taskid

*/

public XLDownLoader( String FileName,String Url,long task){

this.FileName=FileName;

this.Url=Url;

this.task=task;

}

public interface XLDownload extends StdCallLibrary {

public boolean XLInitDownloadEngine();

public int XLURLDownloadToFile(WString pszFileName, WString pszUrl, WString pszRefUrl, NativeLongByReference lTaskId);

public int XLQueryTaskInfo(NativeLong lTaskId, NativeLongByReference plStatus, LongByReference pullFileSize, LongByReference pullRecvSize);

public int XLPauseTask(long lTaskId, NativeLongByReference lNewTaskId);

public int XLContinueTask(long lTaskId);

public int XLContinueTaskFromTdFile(WString pszTdFileFullPath, NativeLongByReference lTaskId);

public void XLStopTask(long lTaskId);

public boolean XLUninitDownloadEngine();

}

/**

*

* @return 268435467 pre-downloaded file exist in specified file path

* -1 Fail to initialize(Fail to find DLL)

* 12 Succeed in downloading file of specified url

*/

public int startTask(String link){

XLDownload xldownload = (XLDownload) Native.loadLibrary(link,XLDownload.class);

if(false==xldownload.XLInitDownloadEngine()){

System.out.println("Initialize download engine failed");

return -1;

}

WString pszFileName=new WString(FileName);

WString pszUrl=new WString(Url);

WString pszRefUrl=new WString("");

NativeLong TaskId=new NativeLong(task);

NativeLongByReference lTaskId=new NativeLongByReference(TaskId);

int dwRet=xldownload.XLURLDownloadToFile(pszFileName,pszUrl ,pszRefUrl, lTaskId);

do{

LongByReference ullFileSize =new LongByReference(0);

LongByReference ullRecvSize =new LongByReference(0);

NativeLongByReference lStatus=new NativeLongByReference(new NativeLong(-1L));

dwRet=xldownload.XLQueryTaskInfo(TaskId,lStatus,ullFileSize,ullRecvSize);

if(0==dwRet){

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

if ( 0 != ullFileSize.getValue() )

{

double douProgress = (double)ullRecvSize.getValue()/(double)ullFileSize.getValue();

douProgress *= 100.0;

System.out.println(FileName+"Download progress:"+douProgress+"%");

}

else

{

System.out.println("File size is zero.\n");

}

if (11==lStatus.getValue().intValue())

{

System.out.println("Download successfully.\n");

break;

}

if ( 12==lStatus.getValue().intValue() )

{

System.out.println("Download failed.\n");

break;

}

}

}while(0==dwRet);

xldownload.XLStopTask(this.task);

xldownload.XLUninitDownloadEngine();

return 12;

}

public static void main(String[] args){

Map info = new HashMap();

info.put("e:\\temp\\18ec54e736d12f2ee6d124c84dc2d56284356846.jpg","http://h.hiphotos.bdimg.com/wisegame/pic/item/18ec54e736d12f2ee6d124c84dc2d56284356846.jpg");

info.put("e:\\temp\\9bdcd100baa1cd11d028f888bb12c8fcc2ce2df8.jpg","http://c.hiphotos.bdimg.com/wisegame/pic/item/9bdcd100baa1cd11d028f888bb12c8fcc2ce2df8.jpg");

info.put("e:\\temp\\2410b912c8fcc3cef9f7d0ab9045d688d43f2076.jpg","http://c.hiphotos.bdimg.com/wisegame/pic/item/2410b912c8fcc3cef9f7d0ab9045d688d43f2076.jpg");

info.put("e:\\temp\\579b033b5bb5c9eadd791d7bd739b6003bf3b3a4.jpg","http://a.hiphotos.bdimg.com/wisegame/pic/item/579b033b5bb5c9eadd791d7bd739b6003bf3b3a4.jpg");

info.put("e:\\temp\\aaea15ce36d3d5397db7115b3887e950342ab0a4.jpg","http://d.hiphotos.bdimg.com/wisegame/pic/item/aaea15ce36d3d5397db7115b3887e950342ab0a4.jpg");

info.put("e:\\temp\\abfcc3cec3fdfc03ae4ffa20d63f8794a4c22676.jpg","http://e.hiphotos.bdimg.com/wisegame/pic/item/abfcc3cec3fdfc03ae4ffa20d63f8794a4c22676.jpg");

info.put("e:\\temp\\f145d688d43f8794e4c851b6d01b0ef41bd53a76.jpg","http://a.hiphotos.bdimg.com/wisegame/pic/item/f145d688d43f8794e4c851b6d01b0ef41bd53a76.jpg");

// final AtomicInteger ai = new AtomicInteger(1);

// ExecutorService service = Executors.newFixedThreadPool(1);

// int i=1;

// List futures = new ArrayList();

for(final Map.Entry entry: info.entrySet()){

//i++;

XLDownLoader instance=new XLDownLoader(entry.getKey(),entry.getValue(),0);

instance.startTask(String.format("XLDownload",1));

/*service.execute(new Runnable() {

@Override

public void run() {

com.leunpha.XLDownLoader instance=new com.leunpha.XLDownLoader(entry.getKey(),entry.getValue(),ai.get());

instance.startTask("E:\\xl\\"+ai.getAndIncrement()+"\\XLDownload.dll");

}

});

futures.add(service.submit(new Callable() {

@Override

public Object call() throws Exception {

return null;

}

}));*/

}

/* service.shutdown();

for(Future future:futures){

try {

future.get();

} catch (InterruptedException e) {

e.printStackTrace();

} catch (ExecutionException e) {

e.printStackTrace();

}

}*/

}

}

原文:http://blog.csdn.net/sc_jelly/article/details/24182193

java调用迅雷_java jna调用迅雷接口下载相关推荐

  1. java调用visa的dll库,查看新闻/公告--[备忘]Java中,使用JNA调用Visa32.dll,控制频谱仪~~...

    Java中,使用JNA调用Visa32.dll,控制频谱仪~~ C:\Program Files\Agilent\IO Libraries Suite\ 有visa.chm,是方法和属性的说明. 首先 ...

  2. JAVA在IDEA中用JNA调用C++的dll动态链接库案例

    目录 引言 准备工作 1.JNA包 2.DLL文件 接口准备 接口参数说明 1.DLL路径 [报错]找不到文件 如何查看DLL文件的位数? 2.函数声明 如何查看DLL文件中有哪些函数? C++与JA ...

  3. java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...

    最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...

  4. java 静态链接_java如何调用静态链接库里面的函数?

    我现在有静态链接库文件:libtest.a里面有很多.o目标文件,其中一个目标文件在linux下使用nm命令查看其中包含的部分函数:kmer_counter.o:UA_memcpyU__cxa_ate ...

  5. java调用属性_Java 属性调用

    Java 属性调用 接下来,我们准备为大家介绍"属性调用". 经过前面的学习,目前,大家已经掌握到如何定义类以及如何定义对象. 那么,在接下来的时间里面,我们就可以开始学习,如何通 ...

  6. java怎么调用方法_Java怎么调用类方法

    Java调用类方法的步骤:首先新建一个类,在调用类中先进行被调用类实例化:然后通过实例化的对象访问:最后新建一个类,将该类中需要被调用的方法设置为静态,加了static后,就可以用类名直接调用,格式为 ...

  7. java comparable排序_JAVA中通过Comparable接口实现简单排序

    Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f, ...

  8. java之父_java之父:被下载达7000万次的编程视频教程,你还没有看过?

    "Java Planform Standard Edition"是Java语言的标准平台技术,是所有Java开发的语言基础,更是大数据.分布式开发思想建模的初期,此阶段的Java语 ...

  9. java 方法绑定_java 方法调用绑定

    将一个方法调用同一个方法主体关联起来被称为绑定. 若在程序执行前期进行绑定(如果有的话,由编译器和连接程序实现),叫做前期绑定. 当编译器只有一个引用时,它无法知道究竟调用哪个方法才对,解决的办法就是 ...

最新文章

  1. Xp下的程序编译成linux,WinXP下打造自己的linux 0.11简易编译环境(原创)
  2. js事件流、事件代理等
  3. javascript-排序算法
  4. 2017ACM/ICPC亚洲区沈阳站 C Hdu-6219 Empty Convex Polygons 计算几何 最大空凸包
  5. C#操作Cookie
  6. thinkphp php5.4报错,ThinkPHP6.0在PHP8下报错解决方法
  7. 本地计算机上的MSSQLSERVER服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报“服务。...
  8. 与程序员相关的CPU缓存知识
  9. 三相同步电机怎么接线图_三相异步电机的正反转原理图解
  10. MSDN2008下载
  11. VSCode中安装Django插件后实现html语法提示
  12. mysql 导出 客户端_Web基础配置篇(四): Mysql的配置及使用
  13. 更好的图片压缩途径: WebP探索之路
  14. 教你语音如何转换成文字的?
  15. ng4使用的音频文件_使用机器学习方法识别音频文件的音乐和演讲
  16. 原生js 给动态添加的元素添加(事件监听器)
  17. autojs上传蓝奏云UI模板
  18. 数据预处理之中心化(零均值化)与标准化(归一化)
  19. 幼儿园初级职称计算机考试,幼儿园教师考试
  20. react-native trampoline实现 1

热门文章

  1. 【亲测有效】解决GitHub下载过慢和下载项目失败的问题
  2. 来自京东、宅急送对微服务编排、API网关、持续集成的实践分享(下)
  3. ECS | 安全组配置
  4. CCF CSP 202209
  5. java gps转高德坐标_GPS 经纬度转换 百度、高德经纬度
  6. Java零基础学习Day01(搭配视频)
  7. MySQL系列:java单例模式例子
  8. java 调用c效率高_java通过JNI调用C语言写的函数,能提高运行效率吗?
  9. linux如何限制普通账户权限,设置登录?
  10. 一种简单的封装VP8/VP9视频的容器:IVF格式