`
JasonShieh
  • 浏览: 527575 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JAVA调用C程序----认识理解Java中native方法,实现底层调用

阅读更多

2007-10-29 10:15 作者:baocl 来源:赛迪网
原文出处:Http://www.enet.com.cn/article/2007/1029/A20071029886398.shtml
[摘要] Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。
[关键字] Java native
  Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。

  可以将native方法比作Java程序同C程序的接口,其实现步骤:

  1、在Java中声明native()方法,然后编译;

  2、用javah产生一个.h文件;

  3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);

  4、将第三步的.cpp文件编译成动态链接库文件;

  5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。

  JAVA本地方法适用的情况

  1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问

  2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的

  3.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。

  首先写好JAVA文件

  /*

  * Created on 2005-12-19 Author shaoqi

  */

  package com.hode.hodeframework.modelupdate;

  public class CheckFile

  {

  public native void displayHelloWorld();

  static

  {

  System.loadLibrary("test");

  }

  public static void main(String[] args) {

  new CheckFile().displayHelloWorld();

  }

  }

  然后根据写好的文件编译成CLASS文件

  然后在classes或bin之类的class根目录下执行javah -jni com.hode.hodeframework.modelupdate.CheckFile,

  就会在根目录下得到一个com_hode_hodeframework_modelupdate_CheckFile.h的文件

  然后根据头文件的内容编写com_hode_hodeframework_modelupdate_CheckFile.c文件

  #include "CheckFile.h"

  #include

  #include

  JNIEXPORT void JNICALL Java_com_hode_hodeframework_modelupdate_CheckFile_displayHelloWorld(JNIEnv *env, jobject obj)

  {

  printf("Hello world!\n");

  return;

  }

  之后编译生成DLL文件如“test.dll”,名称与System.loadLibrary("test")中的名称一致

   vc的编译方法:cl -I%java_home%\include -I%java_home%\include\win32 -LD com_hode_hodeframework_modelupdate_CheckFile.c -Fetest.dll

  最后在运行时加参数-Djava.library.path=[dll存放的路径]
分享到:
评论

相关推荐

    java调用c语言

    在跨语言编程中,Java调用C语言是一种常见的场景,特别是在需要与操作系统底层交互或利用已有C语言库的情况下。Java Native Interface (JNI) 是实现这一功能的核心技术。本文将详细介绍Java调用C语言的基本原理、所...

    java语言方法调用C语言函数

    在这种情况下,Java提供了Java Native Interface (JNI) 这一工具,使得Java程序能够直接调用C语言编写的函数。本文将深入探讨如何在Java中通过JNI调用C语言函数,为初学者提供一个详尽的实例教程。 1. **Java ...

    java怎么调用C语言

    #### 三、Java调用C语言的基本步骤 1. **定义Native Method** 在Java类中声明native方法,这些方法实际上是在本地代码中实现的。 ```java public class TestDLL { static { System.loadLibrary("goodluck"); }...

    Android应用源码之java调用C例子-IT计算机-毕业设计.zip

    在这种情况下,我们可以借助JNI(Java Native Interface)来调用C/C++代码,从而实现性能优化或者访问原生库。本资料"Android应用源码之java调用C例子"提供了一个具体的示例,适用于Android毕业设计和移动开发App的...

    Java中native方法学习

    在深入探讨Java中native方法的学习之前,我们先来理解一下native方法的概念以及它在Java中的作用。Native方法是Java编程语言中的一个特性,允许Java代码调用非Java代码(通常是C或C++编写的),这为Java应用程序提供...

    java调用c c++程序实例

    首先,Java调用C/C++程序的主要技术是通过Java Native Interface (JNI)。JNI是Java平台的一部分,允许Java代码和其他语言写的代码进行交互。它为Java程序员提供了一种方式来编写本地方法,这些本地方法可以调用由C/...

    jni-native底层实现

    ### jni-native底层实现详解 #### 一、JNI(Java Native Interface)简介 JNI(Java Native Interface)是一种标准,用于让Java代码与其他语言编写的代码进行交互,特别是C和C++。通过JNI,开发者可以利用Java语言...

    RFID读卡程序-桌面应用程序-Java-JNI调用Delphi版DLL

    在本项目中,我们关注的是一个基于桌面的应用程序,它利用Java语言来实现RFID读卡功能,并通过JNI(Java Native Interface)调用了Delphi编写的DLL(动态链接库)。 Java JNI是Java平台提供的一种原生接口,允许...

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

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

    javacv-platform-1.5.4.zip

    `javacv-platform-1.5.4.zip`是一个用于Java环境的计算机视觉开发包,它整合了OpenCV和FFmpeg等强大工具,使得Java开发者能够方便地进行图像处理、视频分析和深度学习等任务,而无需深入学习底层的C/C++实现。...

    java实例,通过jawin实现对dll中方法的调用

    Java是一种跨平台的编程语言,但在与底层操作系统交互时,比如调用Windows系统的动态链接库(DLL)中的方法,就需要一些特殊的工具和技术。本实例主要介绍如何使用Java和jawin库来实现DLL方法的调用。 jawin是一个...

    JavaCV两个必须jar包:javacpp-1.4.1.jar和javacv-platform-1.4.1.jar

    JavaCV,全称为Java Computer Vision,是一个开源的计算机视觉库,它为Java程序员提供了一系列方便的接口,使得他们能够利用底层的计算机视觉库,如OpenCV、FFmpeg等。在JavaCV项目中,有两个非常重要的JAR包:`...

    Jnative1.4_java调用动态库所需jar

    4. **实现本地方法**: 在C/C++代码中实现这些函数。头文件中的函数原型将指导你如何编写这些函数。 5. **编译和链接C/C++代码**: 编译C/C++代码,并链接到相应的动态库或静态库,生成本地库。 6. **运行Java程序**...

    java调用delphi动态库的实例

    当Java程序需要调用C、C++或Delphi等本地代码时,可以通过JNI来实现。在Java端,我们创建一个本地方法,该方法的声明会关联到Delphi DLL中的相应函数。 1. **创建Delphi动态库** - 使用Delphi编写DLL项目,定义...

    java调用dll实现键盘的屏蔽

    标题中的“java调用dll实现键盘的屏蔽”指的是在Java程序中通过动态链接库(DLL)来阻止键盘输入。这是一个常见的需求,特别是在自动化测试、安全软件或者某些特殊应用环境中,可能需要防止用户通过键盘进行输入干扰...

    java调用c++生成so库

    其中,`native`关键字表明doSomething()方法是一个本地方法,需要在C++中实现。`System.loadLibrary("mylib")`加载名为"mylib"的动态链接库。 2. **生成JNI头文件**:使用`javah`工具,根据Java源代码生成对应的...

    Java通过JNA调用系统API

    在这种场景下,Java Native Access (JNA) 库为我们提供了一个无需编写C语言桥接代码就能调用系统原生库(如动态链接库DLL在Windows上)的解决方案。 本文将详细介绍如何使用Java通过JNA调用系统API,以Windows系统...

    关于java中的native方法

    JNI允许Java程序调用C、C++等非Java编写的代码,反之亦然,使得Java可以充分利用本地平台的功能,增强应用程序的性能。在Android开发中,JNI的使用尤其广泛,用于实现特定的底层操作或优化性能。 JNI接口由Java...

    Native:使用native实现java调用C程序的

    本篇文章将深入探讨如何使用`native`实现Java调用C程序。 首先,了解`native`关键字。在Java中,`native`是一个修饰符,用于标记一个方法,表明该方法的实现是在Java虚拟机(JVM)外部完成的,通常在C或C++中。例如...

Global site tag (gtag.js) - Google Analytics