`

[原]JNI简单示例

阅读更多
[标题]: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 调用示例JNI C++ .so 调用示例

    在这个“JNI C++ .so 调用示例”中,我们将探讨如何在Java程序中嵌入C++代码,通过编译生成的.so(Linux系统中的动态链接库)文件来执行原生方法。 首先,我们需要理解JNI的基本结构。在Java中,我们需要定义一个带...

    JNI实现回调及JNI开启线程

    以下是一个简单的示例: ```c++ #include void* jniThreadFunction(void* arg) { // 在这里执行你的线程任务 ... // 如果需要与Java交互,记得同步 JNIEnv* env; jint res = (*jvm)-&gt;...

    android中AsyncTask和jni技术简单应用--附案例附代码

    以下是一个简单的JNI示例,定义了一个Java类和一个JNI方法: ```java public class JniExample { static { System.loadLibrary("native-lib"); } public native String stringFromJNI(); } ``` 对应的C++代码...

    jni协议+自定义控件简单例子

    本项目提供了jni协议和自定义控件的简单应用实例,旨在帮助开发者了解和实践JNI的基本用法。 首先,我们来详细讲解JNI的基本概念。JNI为Java程序员提供了一种安全的方式去访问本地代码,比如C/C++,并能够调用这些...

    JNI详解及实例程序(英文)

    以下是一个简单的示例,演示如何使用JNI来创建一个具有两个原生方法的Java程序,这两个方法执行简单的输出操作。 ### 总结 JNI为Java开发者提供了一种与C/C++代码交互的有效途径,这不仅可以提高程序性能,还能...

    JNI++ 用户手册(英文),JNI++ User Guide

    - **处理基本类型和数组**:JNI++支持Java的基本类型和数组,包括自动类型转换,使得在Java和C++之间传递数据变得更简单。 - **异常处理**:JNI++提供了异常检测和抛出机制,能够在Java和C++之间有效地处理异常...

    ubuntu下第一个Jni例子

    这篇博客将引导我们完成在Ubuntu环境下创建并运行一个简单的JNI示例。 首先,我们需要了解JNI的基本概念。JNI接口提供了Java虚拟机(JVM)与本地代码之间的桥梁。当Java程序需要执行一些只能由原生代码完成的任务时...

    java 的jni本地调用简单实例

    最后,`readme.txt`通常会包含一些说明或步骤,指导用户如何运行示例,比如如何编译C++代码,如何运行Java程序,以及可能遇到的问题和解决方案。 总结来说,这个实例展示了Java通过JNI调用C++本地方法的基本流程,...

    JNI.rar_jni

    示例中的"JNI.pdf"可能包含了JNI的基础知识介绍、一个简单的JNI应用实例,以及如何编译和运行本地代码的步骤。通常,这样的文档会讲解如何创建本地方法,如何在Java代码中调用这些方法,以及如何在本地代码中访问和...

    JNI 函数动态注册 JNIDynamicLoad

    `CMakeNdk1`可能是一个使用CMake构建的示例项目,它演示了如何使用CMake来编译和链接JNI动态注册所需的代码。CMake是一个跨平台的构建系统,可以生成适用于不同编译器和操作系统的构建文件,对于NDK项目来说,它可以...

    jni开发代码

    文件“jni_code_2016.11.24”可能包含了示例代码,演示了如何使用JNI编写一个简单的本地方法,或者解决特定问题的解决方案。学习这个文件,开发者可以深入理解JNI的工作原理,提升Java程序的扩展性和性能。

    编译好的Android JNI HelloWorld

    Android JNI(Java Native Interface)是...通过这个简单的示例,开发者不仅可以了解JNI的基本用法,还能掌握如何在Android Studio中使用NDK进行本地代码开发。这将为后续进行更复杂的原生代码集成打下坚实的基础。

    Android Hello JNI

    在这个"Android Hello JNI"的示例中,我们可能会看到一个简单的本地方法,比如打印一条欢迎消息。在Java代码中,声明一个本地方法,例如`native void sayHelloFromJNI();`,然后在C/C++代码中实现这个方法,输出...

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

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

    android_JNI学习(记录文档+参考代码)

    提供的"myJNI学习"文件很可能是包含示例代码的项目,可以帮助理解如何从头开始创建一个简单的JNI项目。这些代码可能涵盖从创建Java类,生成JNI头文件,编写C/C++代码,到编译和加载.so文件的全过程。通过分析这些...

    JNI++ User Guide

    - **输入 Java 类:** 创建一个简单的 Java 类作为示例。 - **创建项目文件:** 使用 JNI++ 的工具自动生成项目文件。 - **调用代码生成器:** 调用代码生成器生成 C++ 代理类和相应的实现文件。 - **生成的文件:**...

    Android NDK——Hello JNI

    要开始一个简单的Android NDK和JNI项目,我们首先会创建一个"Hello JNI"示例。这个例子将展示如何在Android应用中集成C/C++代码,并通过JNI进行交互。以下是具体步骤: 1. **创建Android项目** 使用Android Studio...

    Android studio 下 NDK Jni 开发 简单例子

    本篇文章将深入探讨如何在Android Studio环境下进行NDK和JNI的开发,以"YipJniDemo"这个简单的示例项目为引导。 首先,我们需要理解Android Studio中的NDK。NDK是一组工具,它提供了构建原生库、调试和运行原生代码...

    android jni使用libzip读取压缩文件

    本示例着重讲解如何使用JNI结合libzip库来读取压缩文件,同时对比了通过NDK自带的API接口读取assets资源文件的方法。 libzip是一个开源的C库,用于处理ZIP档案,包括读取、创建、更新和提取文件。在Android环境中,...

Global site tag (gtag.js) - Google Analytics