最近写爬虫需要获取窗口句柄,学习一下Jni。
一、什么时候需要使用Jni?
简单的来说就是可以让你在Java代码中嵌入其他语言的代码,可能你需要调用其他语言的类库,或者你需要你的程序执行效率更快。
二、如何使用Jni?
1.首先写这样一段代码:
class JniTest
{
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new JniTest().displayHelloWorld();
}
}
注意我们的displayHelloWorld()方法的声明,它有一个关键字native,表明这个方法使用java以外的语言实现。方法不包括实现,因为我们要用c/c++语言实现它。注意System.loadLibrary("hello")这句代码,它是在静态初始化块中定义的,系统用来装载hello共享库,这就是我们在后面生成的hello.dll(如果在其他的操作系统可能是其他的形式,比如hello.so)。
2.编译
注意不要造工程中去执行文件,显然是不能执行。
解决方法:在Dos中用javac编译Java文件,生成class文件;
再使用javah JniTest 把class生成.h文件。
3.用一个.c 文件来实现上面的display方法,并且将其生成为.dll文件,具体做法如下:
上面说的不错了,但是有一个地方,就是那个jdk下面的头文件,应该是下面三个:
就是到jdk的安装目录下include下把以下相应的文件,复制到vc目录下的include文件夹下
\jdk\include\jni.h
\jdk\include\win32\jawt_md.h
\jdk\include\win32\jni_md.h
按照下面的方法做:
,然后把.ll文件和class文件放在一起,在dos下面运行运行 Java JniTest.
这样应该是没问题,如果遇到了问题,应该是代码写的不正确,可以考虑重做一次,本人就是这样试了各种方法,最后重做解决问题!
===========================================问题来了,eclipse下面如何运行?
按照上面的步奏,只需要把.dll文件放在jre文件夹下面的bin目录,然后重启eclipse,然后运行就好了啦啦啦啦~
一定要重启一下,因为这样重新加载才能