Java中JNI的使用

编译原理的词法分析是用c语言写的,由于语法分析想试试用树形结构显示出来,就想着用java去写语法分析,但是在不想再用java写一遍词法分析,于是我就决定用JNI来满足需求。

首先编写如下的java代码:

package lexical;

public class Test {
	public native void Main();
	
	static {
		System.loadLibrary("ForMorPhologyOnx64");
	}
	
	public static void main(String [] args){
		Test t = new Test();
		t.Main();
	}
}
然后在cmd里进入到D:\Workplace\compile\src\lexical目录,javac Test.java将其编译。

我的这个文件是在lexical包里的,所以退回上一层在cmd里输入javah -jni lexical.Test,这时看当前文件夹,里面就会有一个叫做lexical_Test.h的.h文件,里面的代码如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class lexical_Test */

#ifndef _Included_lexical_Test
#define _Included_lexical_Test
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     lexical_Test
 * Method:    Main
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_lexical_Test_Main
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
然后在你所用的c/c++ide里创建一个dll项目,把生成的lexical_Test.h文件放到该文件夹下。写一个c或者cpp文件,在该文件中引用lexical_Test.h头文件,并且把其中的
JNIEXPORT void JNICALL Java_lexical_Test_Main
  (JNIEnv *, jobject)
方法按照你想要其实现的功能写出来。这个方法是要被java调用的,就是上面java代码里的Main()方法。

另外还需要jni.h,jni_md.h,jawt_md.h这三个头文件,这三个头文件在安装的jdk的include目录下面。把这三个头文件放到c/c++要用的ide的include目录下,然后选择生成文件,就可以生成dll文件了,该dll文件的文件名应该是dll项目名。把该dll文件放到jre的bin目录下,这样就可以供java调用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值