`
guoyiqi
  • 浏览: 1011129 次
社区版块
存档分类
最新评论

JNI学习------C语言调用Java

 
阅读更多

最近项目中需要使用JNI,所以研究了一下,其中遇到过不少问题,总结一下,让遇到同样问题的人可以得到解决。

在C/C++中调用Java的方法一般分为五个步骤:初始化虚拟机、获取类、获取类的方法、创建类对象、调用方法和退出虚拟机。

下面写一个小程序测试一下:

Java代码:

上面的代码很好理解,我相信你能看的懂,我就不说了。

下面是C语言代码,里面有注释,这里先不详细说明,主要先跑起来再说:

把以上C语言代码用VC6.0打开,然后编译,下面问题就来了,我们一个一个解决。

编译的时候首先会出现如下问题:

错误很明显,我们上面包含了jni.h,但是没找到。这是需要设置一下VC

Tools->Options->Directories,添加JDK安装目录下的两个目录,如图:

同时在Libraryfiles中添加JDK下面的LIB目录,如下图:

点击OK完成,重新编译。

好,新问题又来了,看下面描述:

也很明显,说明没有找到jvm.lib。继续设置VCProject->Settings->Link->Object/librarymodules中把上述路径替换为本机实际安装JDK中的jvm.lib目录,添加完后如下图:


点击OK后重新编译,呵呵,又来问题了,我很高兴啊。


这个问题在网上查了一下,原来是我JDK安装在ProgramFiles下的问题,因为ProgramFiles路径中有一个空格,真郁闷,没办法,只好重装JDK,注意安装目录中不能再有空格了。安装完了,按照上面出现的问题再重新设置一下VC,然后编译,没问题,运行,哇靠,又是一个问题:


这个问题可是花了我大半天时间才搞定的,但其实做法很简单。

看错描述,是没找到jvm.dll,网上很多人说直接找到这个文件把它拷贝到当前目录。但是这种方法不可取,因为jvm.dll这个东东还会依赖其他的文件的,而且它找其它所依赖的文件是通过相对路径找的,你直接就搞这么一个文件出来,其它的也找不到啊。所以这里有一个很好的解决方案,就是把D:\Java\jdk1.6.0_23\jre\bin\client这个JDK下的路径加入Path环境变量,加完之后记得重新用VC打开CPP文件,这个很重要,否则,这个问题还是没有解决。

点击编译,运行,如果出现如下画面,OK,恭喜你,C语言调用Java成功了,下面要做的就是去看代码,并且了解运行的机理了,这个我就不多说了。


源代码下载:http://download.csdn.net/source/3434985



分享到:
评论

相关推荐

    JNI------C语言调用Java

    最近项目中需要使用JNI,所以研究了一下,其中遇到过不少问题,总结一下,让遇到同样问题的人...在C/C++中调用Java的方法一般分为五个步骤:初始化虚拟机、获取类、获取类的方法、创建类对象、调用方法和退出虚拟机。

    linux-java调用c语言编译的so动态库-jni例子-简单计算器

    这个"linux-java调用c语言编译的so动态库-jni例子-简单计算器"是一个典型的示例,展示了如何利用JNI来创建一个Java应用程序,该程序能够调用C编写的动态链接库(.so文件)进行计算操作。 JNI是Java平台的一部分,它...

    JNI学习-C 调用Java

    这篇博客“JNI学习-C 调用Java”可能详细讲述了如何使用C语言通过JNI来调用Java的方法。 在Java中,JNI提供了一套接口,让本地(Native)代码可以访问Java对象、执行方法、操作数组等。首先,我们需要理解JNI的基本...

    Java通过JNI调用C语言函数库的方法.zip

    JNI提供了一组API,让Java代码能够调用本地方法,同时本地代码也可以调用Java方法。 2. **环境配置** 在开始之前,需要确保Java开发环境(JDK)和C编译器(如GCC)已经安装并配置好。同时,需要设置JAVA_HOME环境...

    java调用c语言

    Java调用C语言的主要机制是通过JNI(Java Native Interface)实现的。JNI提供了一组标准API,使得Java应用程序可以直接调用本地方法(通常是C/C++编写的)。具体步骤如下: 1. **定义native方法**:在Java类中定义...

    C语言调用java语言方法

    "C语言调用java语言方法"是一个典型的跨语言通信场景,主要应用于Android平台上的JNI(Java Native Interface)开发。JNI允许Java代码和其他语言(如C/C++)进行无缝交互,提升性能或者利用已有的库资源。 首先,...

    aes-jni-java和c互加解密

    本文将详细探讨"android aes-jni Java和C互加解密"这个主题,它涉及到Android平台上的JNI(Java Native Interface)技术以及AES加密在Java和C语言之间的实现。 首先,AES是一种块密码,它对128位的数据进行加密,...

    java调用C语言编写的so库中的函数,java调用C语言编写的dll库中的函数

    总的来说,Java调用C语言编写的本地库需要理解JNI和JNA的工作原理,以及它们如何处理数据类型转换、参数传递和本地库的加载。通过这些技术,开发者可以充分利用C/C++的性能优势,同时享受Java的平台独立性和高级抽象...

    Java利用jni技术调用c语言库实现用例

    Java利用JNI(Java Native Interface)技术调用C语言库是一个常见的跨语言编程需求,尤其是在需要高效计算或利用操作系统底层功能时。JNI是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。在这个案例...

    Jnidemo-master.3.17.final.ok(20200811.2.0).zip

    2. **JNI接口**:JNI定义了一系列的C语言接口,如`JNIEnv`指针,它是访问Java对象和执行Java方法的关键。每个Java线程都有一个关联的`JNIEnv`指针。 3. **本地方法**:在Java中,本地方法是用其他语言(如C/C++)...

    JNI调用C语言代码示例

    使用java调用c语言编写的so/dll/sl文件。使用java调用c语言编写的so/dll/sl文件。详细介绍: http://blog.csdn.net/liu251/archive/2009/03/03/3953906.aspx 如果有疑问,可以给我留言。

    JniDemo Android调用C语言

    JNI是Java虚拟机(JVM)和本地代码之间的桥梁,它定义了一组接口,使得Java可以调用本地代码,同时本地代码也可以调用Java方法。在Android中,本地代码通常是指C/C++代码,因为它们运行效率高,适用于处理计算密集型...

    Jnidemo-master.3.17.final.ok(modi_by_wyl_20200811).zip

    通过对这个项目的学习,开发者可以深入理解JNI的工作原理,如何在Java和C/C++之间传递数据,以及如何在Android环境下使用NDK进行原生开发。此外,还可以了解如何调试混合代码应用,优化性能,以及处理跨语言调用时...

    Java JNI调用C语言写的清屏的动态链接库

    用c语言写了一个清屏的函数,然后生成动态链接库,再通过jni在java里调用清屏函数。请注意代码中的函数JNIEXPORT void JNICALL Java_Test_cls(JNIEnv *env, jobject obj),函数名字的Test是指使用该函数的Java类的...

    java怎么调用C语言

    ### Java如何通过JNI调用C语言 #### 一、引言 Java作为一种广泛使用的编程语言,因其具有良好的跨平台特性而备受青睐。然而,这种跨平台能力也导致Java与底层系统的交互较为有限,从而限制了某些功能的实现。为了...

    linux C JNI调用java

    首先,要进行C语言调用Java类,我们需要确保有Java Development Kit (JDK) 安装并正确配置。JDK包含了一系列用于开发和运行Java程序的工具,包括javah,这是一个用于生成C或C++头文件和源文件的工具,这些文件定义了...

    安卓串口Socket通讯USB驱动jni相关-通过jni调用C实现高斯模糊效果提高了实现速度.rar

    通过JNI,开发者可以编写C/C++代码,然后在Java层调用,充分利用硬件的计算能力。 2. 高斯模糊:高斯模糊是一种图像处理技术,用于降低图像的局部对比度,从而达到平滑或柔化图像的效果。在Android中,实现高斯模糊...

    JNI攻略之十一――启动虚拟机调用java类

    标题与描述均指向了一个具体的技术主题——通过JNI(Java Native Interface)在C语言环境中启动Java虚拟机并调用Java类。这一技术应用广泛,尤其是在需要跨语言编程或利用Java的特性(如垃圾回收、多线程)而底层...

    android JNI C 调用Java

    在本主题中,我们将深入探讨如何在Android应用中实现C语言调用Java方法。 首先,我们需要理解JNI的基本结构。在Android项目中,JNI相关的代码通常被放在`src/main/jni`目录下,这里的源代码文件通常以`.c`或`.cpp`...

    ndk_c_demo3.30.img.ok Jnidemo-master.3.17.final.ok2.zip

    标题中的"ndk_c_demo3.30.img.ok"和"Jnidemo-master.3.17.final.ok"暗示了这个压缩包包含了两个主要部分:一个C语言的NDK(Native Development Kit)演示项目和一个名为Jnidemo的Java Native Interface(JNI)项目。...

Global site tag (gtag.js) - Google Analytics