JNI允许运行在虚拟机的Java程序能够与其它语言(例如C和C++)编写的程序或者类库进行相互间的调用。同时JNI提供的一整套的API,允许将Java虚拟机直接嵌入到本地的应用程序中。
环境搭建
1、安装jdk及配置环境配置
2、配置vc++ 6.0


编写java代码:
package org.nickfover.jni;
public class Demo {
public static int COUNT = 4;
private String msg;
private int[] counts;
public Demo(){
this("缺省的构造方法");
}
public Demo(String s){
this.msg = s;
}
public String getMessage(){
return msg;
}
public static String getHelloworld(){
return "Hello world!!";
}
public String append(String str,int i){
return str + i;
}
public int[] getCounts(){
return counts;
}
public void setCounts(int[] counts)
{
this.counts = counts;
}
public void throwExcp()throws IllegalAccessException
{
throw new IllegalAccessException("execption occur.");
}
}
编译(注:用eclipse编写的出现编译错误,我把复制出来粘贴在文档文件中,可能是编码的问题)
之后用javap命令查看(javap是jdk自带的反编译软件):
E:\ECLIPSEWORKPALCE\JNI\src\org\nickfover\jni>javac Demo.java
E:\ECLIPSEWORKPALCE\JNI\src\org\nickfover\jni>javap -s -p Demo
Warning: Binary file Demo contains org.nickfover.jni.Demo
Compiled from "Demo.java"
public class org.nickfover.jni.Demo {
public static int COUNT;
Signature: I //这个是指对象在内存中的类型表示,在java模块的类加载哪章有见解
private java.lang.String msg;
Signature: Ljava/lang/String;
private int[] counts;
Signature: [I
public org.nickfover.jni.Demo();
Signature: ()V //()V表示void,括弧内表示参数
public org.nickfover.jni.Demo(java.lang.String);
Signature: (Ljava/lang/String;)V //L表示String
public java.lang.String getMessage();
Signature: ()Ljava/lang/String; //()L表示返回String型
public static java.lang.String getHelloworld();
Signature: ()Ljava/lang/String;
public java.lang.String append(java.lang.String, int);
Signature: (Ljava/lang/String;I)Ljava/lang/String;
public int[] getCounts();
Signature: ()[I
public void setCounts(int[]);
Signature: ([I)V
public void throwExcp() throws java.lang.IllegalAccessException;
Signature: ()V
static {};
Signature: ()V
}
参考:http://public0821.iteye.com/blog/423941
本文介绍如何通过JNI让Java程序与C/C++代码互相调用,并提供了环境搭建步骤和示例代码。通过JNI,Java应用可以直接嵌入本地应用程序中。
4625

被折叠的 条评论
为什么被折叠?



