Java调用Native方法
2012-02-02 12:26
232 查看
一、如何使用
1. 新建Java类
2. 编译Java程序,生成.class文件
javac Test.java
3. 生成.h文件,运行目录要在com的上一级
javah com.test.Test
4. 创建C++工程,引用生成的.h文件,实现hello函数
前两个参数是必须的
5. 生成的DLL必须和第一步中指定的名字一样,即Test.dll
6. DLL可以放在Java程序同目录下,也可通过java.library.path参数传入,或者放在path环境变量包含的目录中
二、如何转换字符串
1. jstring to std string
2. std string to jstring
三、如何处理异常
1. 新建Java类
package com.test; public class Test { public static native String hello(String str); static { System.loadLibrary("Test"); } }
2. 编译Java程序,生成.class文件
javac Test.java
3. 生成.h文件,运行目录要在com的上一级
javah com.test.Test
4. 创建C++工程,引用生成的.h文件,实现hello函数
JNIEXPORT jstring JNICALL Java_com_oblicore_jni_TestJni_hello(JNIEnv * env, jobject obj, jstring str)函数的命名规则为Java_<class fully qualifiedname>_<methodname>
前两个参数是必须的
5. 生成的DLL必须和第一步中指定的名字一样,即Test.dll
6. DLL可以放在Java程序同目录下,也可通过java.library.path参数传入,或者放在path环境变量包含的目录中
二、如何转换字符串
1. jstring to std string
const jchar* raw = env->GetStringChars(str, NULL); if (raw != NULL) { jsize len = env->GetStringLength(str); stdString.assign((wchar_t*)raw, len); env->ReleaseStringChars(str, raw); }
2. std string to jstring
jstring str = env->NewString((const jchar*)stdString.c_str(), (jsize)stdString.length());
三、如何处理异常
jclass Exception = env->FindClass("java/lang/Exception"); env->ThrowNew(Exception, "Error occurred");
相关文章推荐
- JAVA中native方法调用
- JNI调用native方法出现 java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()异常的解决办法
- #菜鸟之旅#Android Studio开发JNI工程——Native调用Java方法获取IMEI
- [JNI] java 多线程调用native 方法
- java JNI native本地方法调用
- Java Native调用C方法
- Java native 本地方法调用
- JAVA中native方法调用
- Android JNI开发(2)--native方法调用Java方法
- java native interface JNI 调用Java方法
- 在java中调用c程序--native方法的学习
- native应用 在C中调用JAVA的方法
- java native:Java本地方法调用(jni方式)
- JAVA调用固有方法---native关键字
- webView 实现 与 javascript调用java方法(也称js调用native 方法) helloworld
- java开发第一个JNI示例程序(基于linux操作系统)--java调用native方法
- java native interface(java 本地方法调用)
- JAVA中native方法--java调用c(转http://karoii.bokee.com/5869823.html)
- JAVA中native方法调用,之后再补充
- webView 实现 与 javascript调用java方法(也称js调用native 方法) helloworld