[标题]:JNI简单示例
[时间]:2009-4-5
[摘要]:Java通过JNI调用DLL。
[关键字]:JNI,DLL,动态库,Java
[环境]:JDK6 + VC6
[作者]:Winty (wintys@gmail.com)
[正文]:
Java通过JNI调用本地系统的动态库(Windows上是dll形式,Unix中是so形式的文件)。JNI的简单步骤如下:
Step1:编写Java类,其中包含要实现的native方法。
JNITest.java:
public class JNITest{
static{
System.loadLibrary("JNITest");
}
public native void showMessageBox();
public static void main(String[] args){
JNITest jni = new JNITest();
jni.showMessageBox();
}
}
编译JNITest.java,命令:"javac JNITest.java",生成JNITest.class。
Step2:生成头文件,命令:"javah JNITest",生成头文件JNITest.h
JNITest.h:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class JNITest */
#ifndef _Included_JNITest
#define _Included_JNITest
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: JNITest
* Method: showMessageBox
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_JNITest_showMessageBox
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
Step3:编写相应的实现文件JNITest.cpp(或.c)。
JNITest.cpp:
#include "JNITest.h"
#include <windows.h>
JNIEXPORT void JNICALL Java_JNITest_showMessageBox
(JNIEnv *, jobject){
::MessageBox(NULL,"This is a JNI test" , "JNI" , MB_OK);
}
Step4:将JNITest.cpp编译成dll,
命令(cl 是VC6的编译命令):
"cl -If:\jdk\include -If:\jdk\include\win32 -LD JNITest.cpp user32.lib -FeJNITest.dll"
Step5:运行,命令:"java JNITest"。运行后会弹出一个对话框。
分享到:
相关推荐
在这个“JNI C++ .so 调用示例”中,我们将探讨如何在Java程序中嵌入C++代码,通过编译生成的.so(Linux系统中的动态链接库)文件来执行原生方法。 首先,我们需要理解JNI的基本结构。在Java中,我们需要定义一个带...
以下是一个简单的示例: ```c++ #include void* jniThreadFunction(void* arg) { // 在这里执行你的线程任务 ... // 如果需要与Java交互,记得同步 JNIEnv* env; jint res = (*jvm)->...
以下是一个简单的JNI示例,定义了一个Java类和一个JNI方法: ```java public class JniExample { static { System.loadLibrary("native-lib"); } public native String stringFromJNI(); } ``` 对应的C++代码...
本项目提供了jni协议和自定义控件的简单应用实例,旨在帮助开发者了解和实践JNI的基本用法。 首先,我们来详细讲解JNI的基本概念。JNI为Java程序员提供了一种安全的方式去访问本地代码,比如C/C++,并能够调用这些...
以下是一个简单的示例,演示如何使用JNI来创建一个具有两个原生方法的Java程序,这两个方法执行简单的输出操作。 ### 总结 JNI为Java开发者提供了一种与C/C++代码交互的有效途径,这不仅可以提高程序性能,还能...
- **处理基本类型和数组**:JNI++支持Java的基本类型和数组,包括自动类型转换,使得在Java和C++之间传递数据变得更简单。 - **异常处理**:JNI++提供了异常检测和抛出机制,能够在Java和C++之间有效地处理异常...
这篇博客将引导我们完成在Ubuntu环境下创建并运行一个简单的JNI示例。 首先,我们需要了解JNI的基本概念。JNI接口提供了Java虚拟机(JVM)与本地代码之间的桥梁。当Java程序需要执行一些只能由原生代码完成的任务时...
最后,`readme.txt`通常会包含一些说明或步骤,指导用户如何运行示例,比如如何编译C++代码,如何运行Java程序,以及可能遇到的问题和解决方案。 总结来说,这个实例展示了Java通过JNI调用C++本地方法的基本流程,...
示例中的"JNI.pdf"可能包含了JNI的基础知识介绍、一个简单的JNI应用实例,以及如何编译和运行本地代码的步骤。通常,这样的文档会讲解如何创建本地方法,如何在Java代码中调用这些方法,以及如何在本地代码中访问和...
`CMakeNdk1`可能是一个使用CMake构建的示例项目,它演示了如何使用CMake来编译和链接JNI动态注册所需的代码。CMake是一个跨平台的构建系统,可以生成适用于不同编译器和操作系统的构建文件,对于NDK项目来说,它可以...
文件“jni_code_2016.11.24”可能包含了示例代码,演示了如何使用JNI编写一个简单的本地方法,或者解决特定问题的解决方案。学习这个文件,开发者可以深入理解JNI的工作原理,提升Java程序的扩展性和性能。
Android JNI(Java Native Interface)是...通过这个简单的示例,开发者不仅可以了解JNI的基本用法,还能掌握如何在Android Studio中使用NDK进行本地代码开发。这将为后续进行更复杂的原生代码集成打下坚实的基础。
在这个"Android Hello JNI"的示例中,我们可能会看到一个简单的本地方法,比如打印一条欢迎消息。在Java代码中,声明一个本地方法,例如`native void sayHelloFromJNI();`,然后在C/C++代码中实现这个方法,输出...
这个"linux-java调用c语言编译的so动态库-jni例子-简单计算器"是一个典型的示例,展示了如何利用JNI来创建一个Java应用程序,该程序能够调用C编写的动态链接库(.so文件)进行计算操作。 JNI是Java平台的一部分,它...
提供的"myJNI学习"文件很可能是包含示例代码的项目,可以帮助理解如何从头开始创建一个简单的JNI项目。这些代码可能涵盖从创建Java类,生成JNI头文件,编写C/C++代码,到编译和加载.so文件的全过程。通过分析这些...
- **输入 Java 类:** 创建一个简单的 Java 类作为示例。 - **创建项目文件:** 使用 JNI++ 的工具自动生成项目文件。 - **调用代码生成器:** 调用代码生成器生成 C++ 代理类和相应的实现文件。 - **生成的文件:**...
要开始一个简单的Android NDK和JNI项目,我们首先会创建一个"Hello JNI"示例。这个例子将展示如何在Android应用中集成C/C++代码,并通过JNI进行交互。以下是具体步骤: 1. **创建Android项目** 使用Android Studio...
本篇文章将深入探讨如何在Android Studio环境下进行NDK和JNI的开发,以"YipJniDemo"这个简单的示例项目为引导。 首先,我们需要理解Android Studio中的NDK。NDK是一组工具,它提供了构建原生库、调试和运行原生代码...
本示例着重讲解如何使用JNI结合libzip库来读取压缩文件,同时对比了通过NDK自带的API接口读取assets资源文件的方法。 libzip是一个开源的C库,用于处理ZIP档案,包括读取、创建、更新和提取文件。在Android环境中,...