- 浏览: 763858 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (663)
- Eclipse&MyEclipse (40)
- PHP (3)
- Java (72)
- CSS (3)
- MySQL (35)
- Oracle (68)
- Red Hat Linux (23)
- Tomcat (26)
- Oracle10gAS (1)
- Spring (28)
- MyBatis&iBatis (13)
- JS (47)
- JQuery (23)
- Editplus (2)
- 其他 (4)
- Html (15)
- SQL (5)
- Ant (2)
- Hadoop (2)
- Servlet (9)
- Windows (11)
- Flex (1)
- CentOS Linux (7)
- Microsoft SQL Server (2)
- DB2 (3)
- Mysql char 与 varchar 区别 (0)
- excel (5)
- jsp (8)
- FreeMarker (1)
- EasyUI (5)
- WebShpere MQ (1)
- Maven2 (6)
- 浏览器缓存 (2)
- visio (1)
- XML (2)
- 物联网 (1)
- Maven (3)
- JSTL (2)
- HTTP (1)
- Fourinone (1)
- IP知识 (1)
- MyBatis (1)
- 项目管理 (2)
- office2003+2007 (1)
- DOS (1)
- JProfiler (1)
- Thinpad T440p (1)
- ActiveMQ (10)
- MongoDB (5)
- Vert.x3 (1)
- Ngnix (3)
- Spark (2)
- BigData (1)
- 性能概念公式 (1)
- RocketMQ (3)
- IT名词术语 (1)
- Java编程工具 (1)
- RabbitMQ (2)
- MetaMQ (1)
- 架构 (6)
- KafkaMQ (7)
- Redis (4)
- OAuth (1)
- Gradle (1)
- CentOS (5)
- Microsoft_Toolkit (1)
- git (5)
- IntelliJ Idea (4)
- Nginx (3)
- docker (12)
- VMware (2)
- 算法 (1)
- JDBCPool (1)
- spring-cloud (7)
- netbean (1)
- 微信小程序 (2)
- CURL (2)
- Java生成二维码 (1)
- 区块链 (2)
- 机器学习 (1)
- SpringBoot (3)
- Android (9)
- 微服务架构 (1)
- Kubernetes (2)
- OpenProject (0)
- 测试 (1)
- https (1)
- 开源许可证 (1)
- ServiceMesh (2)
- NET (0)
- .NET (1)
- TEST (1)
- iOS (2)
- thymeleaf (4)
- lombok (1)
- 浏览器设置 (1)
- 富文本编辑器 (1)
- 搜索引擎 (1)
- IT常识 (1)
- UML (0)
- Axure (1)
- appstore无法联网 (0)
- apk无法安装 (1)
- SQLServer (2)
- 卸载弹窗软件 (1)
- jenkins (1)
- TortoiseGit (1)
- eureka (1)
- ajax (1)
- spyder (0)
最新评论
Java调用.dll文件
关键字: jnative dll
因为项目的需求,要在JAVA项目中调用Windows的Dll(动态链接库)文件,之前用Jni调用过C写的Dll文件,比较麻烦,这里不多说,网上也有很多这方面的文档。在网上找到一个开源的组件JNative,使用后感觉比较方便。
-
下截JNative组件
jnative.sourceforge.net/ 到这里下载JNative开源项目,我下载的是1.3.2 -
解压JNative-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899">1.3.2</st1:chsdate>.zip
获得三个文件,分别是:JNativeCpp.dll,libJNativeCpp.so,JNative.jar 。
JNativeCpp.dll Windows下用的,拷贝到windows / system32目录下;
libJNativeCpp.so Linux下的,拷贝到系统目录下;
JNative.jar 这是一个扩展包,导入工程LIB中或将其拷贝到jdk\jre\lib\ext 下,系统会自动加载。 -
使用说明
我的项目将使用JNative组件调用一个测试应用服务器状态的TestAppSvr.dll文件,Dll文件中包含一个TestConnect()方法,返回一个整形的结果(1或0)
首先配置好JNative组件的windows环境:
将Native要用到JNativeCpp.dll放在系统盘的\WINDOWS\system32下
将JNative.jar导入工程中,新建一个调用类:java 代码- package com.tvjody;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import org.xvolks.jnative.JNative;
- import org.xvolks.jnative.Type;
- import org.xvolks.jnative.exceptions.NativeException;
- public class AppSvrTestConnect {
- public AppSvrTestConnect() {
- }
- /**
- * 测试应用服务器连接状态
- *
- * TestConnect
- * @param ip 应用服务器IP
- * @param port 端口
- * @param intrcpt 是否采用数据压缩方式 1 :true 0:false
- * @return int 1 :成功 0:失败
- * @throws NativeException
- * @throws IllegalAccessException
- */
- private static final int TestConnect(String ip, int port, int intrcpt)throws NativeException, IllegalAccessException {
- JNative n = null;
- try {
- n = new JNative("TestAppSvr.dll", "TestConnect");
- n.setRetVal(Type.INT);
- int i = 0;
- n.setParameter(i++, Type.STRING, ip);
- n.setParameter(i++, Type.INT, "" + port);
- n.setParameter(i++, Type.INT, "" + intrcpt);
- n.invoke();
- return Integer.parseInt(n.getRetVal());
- } finally {
- if (n != null)
- n.dispose();
- }
- }
- /**
- * 指定Dll文件路径,动态加载本地链接库,测试应用服务器连接状态
- * setDllPath
- * @param path Dll文件的路径,不包含DLL名称 例如:windows - d:\test\test\ unix - root/test/test/
- * @param ip 应用服务器IP
- * @param port 端口
- * @param intrcpt 是否采用数据压缩方式 1 :true 0:false
- * @return int 1 :成功 0:失败
- * @throws NativeException
- * @throws IllegalAccessException
- */
- public static final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) throws NativeException, IllegalAccessException{
- path += "TestAppSvr.dll";
- System.load(path);
- return TestConnect(ip,port,intrcpt);
- }
- /**
- * Dll文件放在JRE\bin目录下面,ClassLoader就能通过System.loadLibrary()动态加载本地链接库
- * TestConnectFromDllPath
- * @param ip 应用服务器IP
- * @param port 端口
- * @param intrcpt 是否采用数据压缩方式 1 :true 0:false
- * @return int 1 :成功 0:失败
- * @throws NativeException
- * @throws IllegalAccessException
- */
- public static final int TestConnectFromDllPath(String ip, int port, int intrcpt) throws NativeException, IllegalAccessException{
- System.loadLibrary("TestAppSvr");
- return TestConnect(ip,port,intrcpt);
- }
- }
这个类实现了一个静态私有方法,用来调用Dll文件中的方法返回结果
private static final int TestConnect(String ip, int port, int intrcpt)
两个静态公共方法,分两种方式装载DLL文件
public static final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) //通过DLL文件的路径
public static final int TestConnectFromDllPath(String ip, int port, int intrcpt) //通过ClassLoader
然后新建一个类,调用AppSvrTestConnect.java,实现方法一调用,我是将TestAppSvr.dll文件与Demo.java放在一个目录下 ,所以得到Demo.java的路径后就可以得到TestAppSvr.dll的路径,调用AppSvrTestConnect.TestConnectFromDllPath()方法后就能返回正确的信息.方法二是已经将TestAppSvr.dll放在了Jre\bin目录下,在JVM的Classloader的时候会自动加载,然后通过System.loadLibrary("TestAppSvr")就可以装配DLL文件.
- public class Demo {
- public int getInfo() throws NativeException, IllegalAccessException{
- String path=getClass().getResource(File.separator).getPath();
- path = path.substring(1,path.length());
- System.out.println(path); //得到DLL文件的路径
- String ip = "192.168.0.48"; //服务器IP
- int port = 221; //端口
- int intrcpt = 1; //数据压缩方式传送,1为采用;0为不采用
- //方法1 传入Dll文件的路径
- //int info = AppSvrTestConnect.TestConnectFromDllPath(path, ip, port, intrcpt);
- //方法2 Dll文件已经放在JRE\bin目录下面
- int info = AppSvrTestConnect.TestConnectFromDllPath(ip, port, intrcpt);
- //1为成功,0为失败
- if (info == 1)
- System.out.println("应用服务器可用。");
- else
- System.out.println("应用服务器不可用,请检查IP地址和端口是否正确。");
- return info;
- }
System.loadLibrary():装载Windows\System32下或jre\bin或Tomcat\bin目录下的本地链接库
System.load():根据具体的目录来加截本地链接库,必须是绝对路径
-
备注
上面的示例工程,因为是例子,所以没有大多的设计,只是实现了装载DLL文件,调用DLL文件方法,返回信息.
JNative的详细说明,请参考JNative的源程序和例子.
注意JVM只允许一个默认的ClassLoader来load native library,同时并不提供专门的API来unload一个loaded native library,所以在项目调试的时候,独立启动Web Server.
发表评论
-
文本域显示行数算法
2021-03-10 22:46 283每行显示字符数: showCount 总共字符数:tot ... -
[初级容易犯错的地方]JAVA方法中的参数用final来修饰的效果(转)
2020-11-23 16:52 237今天顺便看到这个文章,转发一下,因是很多初级者容易犯错的地 ... -
Java批量解析微信dat文件,微信图片破解
2020-02-17 20:33 2092package com.chinada.dms.test.y ... -
Spring Framework 5.0 入门篇(转)
2019-04-25 10:00 01.为什么学习Spring? 随着对Java EE ... -
类中内部类中的方法访问外部类中变量的示例(转)
2018-10-06 21:23 458lass Day10_11 { public static ... -
java连接ssh到服务器执行命令(免密码)
2018-07-10 09:00 0今天在做不同服务器间,免密码执行curl 命令 Java ... -
于Aviator的规则引擎Demo(转)
2018-05-03 09:26 1834编写不易,转载请注明(http://shihlei.itey ... -
va网络爬虫经验分享(转)
2018-04-20 10:33 574最近三年很少写博客,虽然一直从事IT行业,但更多的是管理工作 ... -
高级Java开发人员最常访问的几个网站(转)
2018-04-19 14:30 309这是高级Java开发人员最常访问的几个网站。 这些网 ... -
趣味算法图解,文科生都看懂了(转)
2018-04-17 17:22 882编者按 IDEA 是由 Sándor ... -
Java Security:公钥私钥、数字签名、消息摘要是什么 (转)
2018-04-13 10:10 420https://www.cnblogs.com/f119436 ... -
一文了解十大 Java 开发者必备测试框架!(转)
2018-04-10 13:55 366想要提升自己的自动化测试技能吗?本文将介绍10个优秀的 Ja ... -
深入理解 Java 多线程核心知识:跳槽面试必备(转)
2018-04-02 13:43 329多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并 ... -
11大Java开源中文分词器的使用方法和分词效果对比(转)
2018-03-19 15:37 559原文出处: 杨尚川 本文的目标有两个: 1、学会使用1 ... -
远程debug代码(转)
2018-03-16 16:45 1017参考:http://blog.csdn.net/su ... -
微服务架构初探(转)
2018-03-16 16:39 645什么是微服务 ... -
你真的理解了MVC, MVP, MVVM吗?(转)
2018-03-15 15:26 543前言: 准备写这篇文章的时候 , 我自认为对MVC已经有深刻 ... -
JAR(Spring Boot)应用的后台运行配置(转)
2018-03-09 07:04 1116酱油一篇,整理一下关于Spring Boot后台运行的一些配 ... -
一位阿里架构师在2018年给每个程序员的小建议(转)
2018-03-01 15:54 571一位阿里架构师在2018年给每个程序员的小建议 1 ... -
Java 9 新特性,看这里就明白了(转)
2018-02-28 14:54 5671、Java9 新特性之---目 ...
相关推荐
标题 "http://topkinghat.iteye.com/blog/840706" 提到的博客链接实际上指向了“姜铁”的个人博客文章,而描述中的 "NULL" 暂无具体信息。不过,标签“源码”和“工具”暗示了这篇博客可能涉及到软件开发的源代码...
NULL 博文链接:https://jaychang.iteye.com/blog/980159
NULL 博文链接:https://albert0707.iteye.com/blog/562969
从零开始学Spring Boot,没有积分的可以看博客:http://412887952-qq-com.iteye.com/ 【Spring Boot 系列博客】 0)前言【从零开始学Spring Boot】 : http://412887952-qq-com.iteye.com/blog/2291496 (1...
NULL 博文链接:https://utopialxw.iteye.com/blog/1138133
NULL 博文链接:https://itace.iteye.com/blog/2306140
tcnative-1文件 博文链接:https://panjun.iteye.com/blog/191662
NULL 博文链接:https://yuemeiqing2008-163-com.iteye.com/blog/1912881
http://www.iteye.com/topic/699515 主题:Swing是一把刀 http://www.iteye.com/topic/702804 主题:Swing第二刀:枝间新绿一重重 http://www.iteye.com/topic/707540 主题:Swing第二小刀刀:星星之火可以燎原 ...
博文链接:https://jackzhangyunjie.iteye.com/blog/202349
NULL 博文链接:https://coolzhi.iteye.com/blog/665516
博客链接<https://7wolfs.iteye.com/blog/2043835>提供了更具体的实现细节和示例代码,建议参考学习。在压缩包文件“CSharp”中,可能包含了与C# DLL相关的源码或工具,可以作为实践这一技术的起点。 总的来说,...
NULL 博文链接:https://jilongliang.iteye.com/blog/1907524
NULL 博文链接:https://wy649898543.iteye.com/blog/1423655
NULL 博文链接:https://ownraul.iteye.com/blog/1277047
webwork exercise struts2 exercise ORM:one-to-many,many-to-many,self-relationship RoR exercise later... 博文链接:https://riss.iteye.com/blog/81513
博文链接:https://lijinyan3000.iteye.com/blog/188283