- 浏览: 132787 次
- 性别:
- 来自: 苏州
文章分类
最新评论
在java中创建jni,都是通过一些命令,创建一些基本文件,然后在VS C++中,创建工程,导入那些文件,比较繁琐,不容易管理,而且c++中出了异常的话,java也不好处理。基于以上原因,我们可以使用JunC++ ion来使得整个过程自动化。
JunC++ion 创建JNI过程
首先将所有的native方法的class放入一个单独的java工程里,在ANT文件中,配置好,运行后,可以生成一个c++工程。接下来只需在xxxuserImpl文件中,做参数转换和调用native方法实现,最后编译,链接生成dll。在Java中,这些参数不使用java基本类型而使用包装类型为好。在参数转换时,就完全可以采用标准c++类型来处理了。JunC++ion对java的基本类型,采用c++做了重写。如:java.lang.String,重写为:Java::lang::string.
总结:快速创建C++工程,便于管理,可以异常控制等等。
Here's what you would do in Java:
- design a Java type that exposes the desired API to Java applications and internally uses native methods to delegate to the C++ side.
- run the
javah
tool to generate C declarations for for the required native methods. - implement all the native methods in a combination of C, JNI, and your own C++ code.
Here's what the same development process looks like when you're using JunC++ion:
- design a Java type that exposes the desired API to Java applications and internally uses native methods to delegate to the C++ side.
- run the code generator to generate delegating implementations for the required native methods.
- implement all the native methods in a combination of generated C++ proxy classes and your own C++ code.
The obviousness of the answer depends on your familiarity with JNI and on the scale of your integration problem. JNI is typically considered a rather unattractive integration technology because it's so error-prone and hard to use. When you're implementing native methods using JNI, you rarely have the luxury of only using your own code in the implementation. Much more frequently, you need to access elements on the Java side or create Java instances as return values, forcing you to call back into Java via JNI. Coding JNI by hand is a shortcut to an unstable appliation because it's trivially easy (even for an experienced JNI developer) to leak references or make other mistakes that will eventually lead to a hard-to-debug application failure. If you add C++ with its ability to throw exceptions to the mix, you almost certainly have a catastrophe that's just waiting to happen because your Java process will not tolerate a C++ exception thrown from within a native method.
发表评论
-
几种任务调度的 Java 实现方法与比较
2014-12-05 16:16 655几种任务调度的 Java 实现方法与比较 http:// ... -
Jibx
2013-03-11 10:25 1352A. Java To Xml 1. Generate ... -
常用的正则表达式(转)
2013-02-06 11:16 1310“^d+$” //非负整 ... -
solr 开发文档
2013-01-04 13:12 0http://www.cnblogs.com/hoojo/ar ... -
Java如何调用script
2012-05-16 16:25 1913在Java 中如何调用各种脚本(shell,perl,pyth ... -
理解ThreadLocal(转)
2011-09-02 15:03 958ThreadLocal是什么 早在JD ... -
Java关键字transient和volatile小结(转)
2011-08-29 17:26 20236transient和volatile两个关 ... -
REST与SOAP样式Web 服务的区别(转)
2011-07-25 11:25 1160基本原理层次上说,REST 样式和 SOAP ... -
Java自带的线程池ThreadPoolExecutor详细介绍说明和实例应用(转)
2011-04-11 10:51 1987从 Java 5 开始,Java 提供了自己的线程池。线程 ... -
HttpURLConnection使用
2009-06-22 17:15 3386HttpURLConnection是基于HTTP协议的,其底层 ... -
利用httpclient访问受保护的资源地址
2009-06-22 17:00 1380模拟登录 1、session方式 import java.io ... -
常见算法程序实现集合(C,Java)
2008-12-22 15:16 1135常見程式演算」主要收集一些常見的程式練習題目,您可以藉這些題目 ... -
在 Windows 中实现 Java 本地方法
2008-12-10 14:26 1562WebSphere Development Research ... -
N!的全排列算法(Java实现)
2008-09-16 16:20 2611public class TestSort { Str ... -
JDK1.5新特性(转载)
2008-02-27 14:13 2880"JDK1.5"的一个重要主题就是通过新增 ... -
采用ASM动态生成set和get方法
2007-12-18 16:13 4114ASM 功能强大,采用指令操纵class文件,可以生成你所需的 ... -
Java的ClassLoader与Package机制(转载)
2007-07-01 21:41 1285为了深入了解Java的ClassLoader机制,我们先来做以 ...
相关推荐
很多时候,在JAVA中有不错的实现,比如一个LIB,一个CLASS。很想把它转换为C++实现。在网上找了很久,需望能找到一个工具,自动化一下。可惜,我一直没有找到,今天顺手写了一个,给大家分享。。...
Junc-cli就是这样一款工具,通过预设的模板和命令行交互,它可以自动化创建符合JuncDT规范的项目框架,从而免去手动设置的繁琐工作。 JuncDT,全称为"Junc Data Tool",可能是一个数据处理或数据分析相关的框架或库...
junc-功能性Java ##背景在函数式编程中,开发人员通常坚持不变性的做法。 这些语言往往表现力很强,甚至语言的流控制元素也像函数一样返回值。 通常,只要您的程序停止按顺序处理代码,函数式编程和命令式编程就会...
**JUnC - Java Underdeveloped Compiler 开源项目详解** JUnC,全称为Java Underdeveloped Compiler,是一个教育性质的Java编译器项目。它的主要目的是为了帮助开发者深入理解编译器的工作原理,而非作为商业用途。...
基于道路网的最短路径算法的研究与实现 很好的毕业设计资料哦
这一过程在技术上被称为“本地硬盘安装”,它提供了一种无需物理光盘的便捷安装方式,尤其适用于那些没有光驱或者不希望使用USB驱动器的用户。 Leopard,全名Mac OS X Leopard,是苹果公司推出的第7版Mac操作系统,...
就高功率激光对PIN结光电二极管因热效应引起的硬破坏过程进行了理论和实验研究.提出激光的热效应与伴随等离子体扩展时向外喷溅形成的冲刷效应是导致硅光二极管被破坏的主要原因。得到了Q开关YAG激光与PIN结光电...
在使用Chameleon Install 1577时,一个关键的步骤是将第一启动项设置为光驱。这意味着在计算机开机时,用户需要确保BIOS设置优先从光盘驱动器读取启动信息,这是因为Chameleon通常被刻录到光盘上作为一个启动媒介。...
这是mac系统修改键盘映射的一款工具软件,解压安装后在系统偏好设置那里找到。可以自己建立不同的映射关系。可以充当魔兽等游戏的改键工具,不过大部分都要自己去实现,网上有说明,所以这里只是提供工具的下载。...