jni4net使用小结
- 网站首页
- 一个简单的例子:
1) 从这里下载binaries,然后解压缩.
https://sourceforge.net/projects/jni4net/files/
2) 创建一个.net的console application.
3) 讲lib目录中的jni4net.n-0.8.8.0.dll和jni4net.j-0.8.8.0.jar分别拷贝到单独的目录和根目录.


4) 在项目中添加jni4net.n-0.8.8.0的引用

5) 在Program.cs中加入如下的代码:
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using java.io; using java.lang; using java.util; using net.sf.jni4net; using net.sf.jni4net.adaptors; namespace Jni4NetTest2 { class Program { static void Main(string[] args) { var setup = new BridgeSetup(); setup.Verbose = true; setup.AddAllJarsClassPath("./"); // create bridge, with default setup // it will lookup jni4net.j.jar next to jni4net.n.dll Bridge.CreateJVM(new BridgeSetup() { Verbose = true }); //Bridge.RegisterAssembly(typeof(jni).Assembly); // here you go! java.lang.System.@out.println("Hello Java world!"); TestNotesExporterInJava(); Console.ReadLine(); } } } |
这个程序运行起来后,就会打印出Hello Java world!的字样.
- 上面简单的例子只是使用了jni4net自带的库,如果使用其他的.jar库,就需要使用proxygen工具来生成proxy类.
如果某个软件支持java接口, 想用里面的某个jar文件的时候,就用如下的命令来生成:
|
"C:\jni4net-0.8.8.0-bin\bin\proxygen.exe" "C:\Program Files (x86)\<软件目录>[\<子目录>]\<需要的jar文件名>.jar" -wd "<输出目录>" |
上面用到的jar文件如果依赖于其他的jar文件,运行命令的时候会报类似如下的错误:
|
Can't load class <namespace>[.<sub namespace>].<class name> |
这个时候就需要使用-cp或者dp参数.
比如:
|
"C:\jni4net-0.8.8.0-bin\bin\proxygen.exe" "C:\Program Files (x86)\<软件目录>[\<子目录>]\<需要的jar文件名>.jar" -wd "<输出目录>" –cp “c:\software1\libs”,”c:\software2\aa.jar” |
-cp参数的写法可能仿照这里的就可以
https://www.ibm.com/developerworks/lotus/library/ls-Java_access_pt1/index.html

Dp参数还没有研究明白.
- 官网给的例子:
https://github.com/jni4net/jni4net/wiki/Calling-Java-in-C%23
- 官网给出的proxy的proxygen用法
https://github.com/jni4net/jni4net/wiki/Generating-Proxies
jni4net使用小结的更多相关文章
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- iOS--->微信支付小结
iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...
- iOS 之UITextFiled/UITextView小结
一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- scikit-learn随机森林调参小结
在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...
- Bagging与随机森林算法原理小结
在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...
- scikit-learn 梯度提升树(GBDT)调参小结
在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...
随机推荐
- python接口自动化测试八:更新Cookies、session保持会话
s = requests.session() # 此方法只适用于网站是cookies这种,网站是token的没用 # 这样做的好处就是可以保存cookies并保持会话,不用每次都去获取.传参 Toke ...
- Ext.js项目(二)
人事管理模块: 1.机构管理 2.部门管理 3.人员管理 一:用例图
- For each loop in Native C++
今天发现 for each 语法居然可以直接编译通过,之前还以为只有开了/clr才可以支持.查了一下资料发现ms从vs2005就已经支持了.虽然不符合标准不过用着确实方便啊,必须记录一下. 具体看这里 ...
- 08 IO库
#include<iostream> #include<vector> #include<string> #include<fstream> using ...
- POJ 1995 Raising Modulo Numbers (快速幂)
题意: 思路: 对于每个幂次方,将幂指数的二进制形式表示,从右到左移位,每次底数自乘,循环内每步取模. #include <cstdio> typedef long long LL; LL ...
- 【BZOJ3626】[LNOI2014]LCA
题解: 数据结构套路真多.. 思考了一下线段树分治和启发式合并发现复杂度并不怎么对.. 看了题解发现都是套路啊 考虑一下lca(x,y)的dep有什么性质 我们把1-x的路径+1,查询1-y的路径和 ...
- BZOJ5047 空间传送装置 2017年9月月赛 最短路 SPFA
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5047 题意概括 概括??~别为难语文做一题错两题的我了…… 题解 我们发现,对于某一种装置,有c种 ...
- BZOJ1087 [SCOI2005]互不侵犯King 状态压缩动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1087 题意概括 在n*n的棋盘上面放k个国王,使得他们互相无法攻击,问有多少种摆法. 题解 dp[ ...
- 009 搭建Spark的maven本地windows开发环境以及测试
在看完下面的细节之后,就会发现,spark的开发,只需要hdfs加上带有scala的IDEA环境即可. 当run运行程序时,很快就可以运行结束. 为了可以看4040界面,需要将程序加上暂定程序,然后 ...
- unity 之 no cameras rendering
相机被隐藏或删除了 应该是你的代码摧毁了全部的东西,包括摄像机,所以就会提示你没有摄像机了. 或者说你将 OnClose(); 这段代码的脚本赋给了摄像机