Ubuntu 使用Jni开发实例详解

 更新时间:2016年10月24日 11:51:34   投稿:lqh  
这篇文章主要介绍了Ubuntu 使用Jni开发实例详解的相关资料,需要的朋友可以参考下

1. 编写Java文件,在其中声明native方法, 并通过static 语句块加载动态链接库,示例Prompt.java代码如下:

class Prompt {
  private native String getLine(String prompt);

  public static void main(String args[]) {
    Prompt p = new Prompt();
    String input = p.getLine("Type a line: ");
    System.out.println("User typed: " + input);
  }

  static {
    System.loadLibrary("Prompt");
  }
}

2.调用javac命令生成Prompt.class文件;

javac Prompt.java

3.调用javah命令生成Prompt.h头文件供C程序引用:

javah -jni Prompt

自动生成的头文件如下:

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

#ifndef _Included_Prompt
#define _Included_Prompt
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:   Prompt
 * Method:  getLine
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_Prompt_getLine
 (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

4.编写Prompt.c文件实现具体功能:

#include <jni.h>
#include <stdio.h>
#include "Prompt.h"

JNIEXPORT void JNICALL
Java_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt) 
{
  char buf[128];
  const jbyte *str;
  str = (*env)->GetStringUTFChars(env, prompt, NULL);
  if(str == NULL) {
    return NULL;    
  }
  printf("%s", str);
  (*env)->ReleaseStringUTFChars(env, prompt, str);
  scanf("%s", buf);
  return (*env)->NewStringUTF(env, buf);
}

5. 编译动态库libPrompt.so;

gcc -shared -fpic -I/usr/lib/jvm/java-6-sun-1.6.0.26/include -I/usr/lib/jvm/java-6-sun-1.6.0.26/include/linux Prompt.c -o libPrompt.so

6. 运行。

java Prompt

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • 聊聊finally中的代码一定会执行吗

    聊聊finally中的代码一定会执行吗

    通常在面试中,只要是疑问句一般答案都是“否定”的,因为如果是“确定”和“正常”的,那面试官就没有必要再问了嘛,本文想和大家聊聊finally中的代码一定会执行吗?,感兴趣的朋友跟着小编一起来看看吧
    2023-12-12
  • java @interface 注解详解及实例

    java @interface 注解详解及实例

    这篇文章主要介绍了java @interface 注解详解及实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • java LRU算法介绍与用法示例

    java LRU算法介绍与用法示例

    这篇文章主要介绍了java LRU算法,简单介绍了LRU算法的概念并结合实例形式分析了LRU算法的具体使用方法,需要的朋友可以参考下
    2017-09-09
  • IDEA 中创建Spring Data Jpa 项目的示例代码

    IDEA 中创建Spring Data Jpa 项目的示例代码

    这篇文章主要介绍了IDEA 中创建Spring Data Jpa 项目的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • SpringBoot整合Swagger接口文档工具的流程步骤

    SpringBoot整合Swagger接口文档工具的流程步骤

    我们在开发接口的时候,会将接口文档给前端的开发者进行对接,我们可以通过Postman或者Yapi等接口管理工具进行编写管理,实际开发中,接口的管理确实也应该通过专业的工具管理,本文,我们就来谈谈怎么在SpringBoot整合Swagger接口文档工具
    2023-08-08
  • 设计模式之原型模式_动力节点Java学院整理

    设计模式之原型模式_动力节点Java学院整理

    这篇文章主要介绍了设计模式之原型模式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Mybatis 一级缓存和二级缓存原理区别

    Mybatis 一级缓存和二级缓存原理区别

    这篇文章主要介绍了Mybatis 一级缓存和二级缓存原理区别 ,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Java项目中classpath类路径是什么

    Java项目中classpath类路径是什么

    classpath指的是类路径,也就是编译之后的target文件夹下的WEB-INF/class文件夹,下面这篇文章主要给大家介绍了关于Java项目中classpath类路径是什么的相关资料,需要的朋友可以参考下
    2023-02-02
  • Java判断是否为闰年的方法示例

    Java判断是否为闰年的方法示例

    这篇文章主要介绍了Java判断是否为闰年的方法示例,本文直接给出示例代码,并讲解了判断原理,需要的朋友可以参考下
    2015-06-06
  • SpringBoot登录用户权限拦截器

    SpringBoot登录用户权限拦截器

    这篇文章主要介绍了SpringBoot登录用户权限拦截器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论