12.09.2015 Views

JAVA NATIVE INTERFACE (JNI)

JAVA NATIVE INTERFACE (JNI)

JAVA NATIVE INTERFACE (JNI)

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>JAVA</strong> <strong>NATIVE</strong> <strong>INTERFACE</strong> (<strong>JNI</strong>)<br />

INVOCANDO C/C++ DESDE <strong>JAVA</strong><br />

Java proporciona un marco denominado Java Native Interface (<strong>JNI</strong>), con la que es posible<br />

escribir métodos nativos. Un método nativo es un método que se mapea a una función de<br />

una librería de código nativo, tal como un DLL en Windows. Por ejemplo, se puede escribir<br />

código en C o C ++ y llamarlo desde Java.<br />

Ejemplo utilizando Ms Visual Estudio 2010<br />

Las etapas para la implementar un proyecto en el que se invoque código C/C++ desde java<br />

son:<br />

1. Crear en Visual Estudio un proyecto en C / C ++ de tipo DLL .<br />

2. Escribir las firmas de método Java para los métodos nativos<br />

3. Compilar el archivo Java y ejecutar la herramienta javah para crear archivos de<br />

encabezados en lenguaje C correspondientes a las firmas de los métodos del punto<br />

anterior.<br />

4. Asegurarse que el proyecto incluye los directorios que contienen los encabezados<br />

<strong>JNI</strong> en sus includes<br />

5. Basándose en los encabezados, escribir las implementaciones nativas de los<br />

métodos (en C / C + +);<br />

6. Compilar la DLL;<br />

7. En el código de Java, llamar System.loadLibrary () para enlazar la librería en tiempo<br />

de ejecución, y a continuación, invocar los métodos nativos.<br />

1. Crear en Visual Estudio un programa en C / C ++ proyecto de tipo DLL<br />

En la herramienta Visual estudio ejecutar el comando file->new project


Click OK y aparece la pantalla siguiente:<br />

Clik Next<br />

Seleccionar DLL y Click en Finish.


2. Crear directorio y escribir las firmas de método Java para los métodos nativos<br />

Crear un directorio donde residirá el proyecto Java (en este ejemplo es<br />

C:\Users\ProgAva\Desktop\DADI\square). A continuación, escriba la firma del método<br />

que vamos a implementar de forma nativa. En general, esto se parece a una firma de<br />

método ordinario de Java, pero con el modificador native. Contenido del archivo<br />

Square.java<br />

package math;<br />

class Square {<br />

public native int getSquare(int x);<br />

static {<br />

System.loadLibrary("Square");<br />

}<br />

public static void main(String[] args) {<br />

int y=new Square().getSquare(4);<br />

System.out.println(" Y = "+y);<br />

}<br />

}<br />

Contenido del archivo Square.java<br />

Contenido del directorio DADI/square<br />

3. Compilar el archivo Java y ejecutar la herramienta javah para crear archivos de<br />

encabezados en lenguaje C<br />

Compilación y generación de encabezado


Nuevo contenido del directorio DADI/square<br />

<strong>JNI</strong>EXPORT jint <strong>JNI</strong>CALL Java_math_Square_getSquare(<strong>JNI</strong>Env *, jobject, jint);<br />

Firma de la función en C/C++ (tomada del archivo math_Square.h)<br />

4. Asegurar que el proyecto incluye los directorios que contienen los encabezados <strong>JNI</strong> en<br />

sus includes<br />

En la pantalla de Visual Estudio hacer click con el botón derecho sobre el nombre del<br />

proyecto y seleccionar la opción properties:


Aparecerá la siguiente ventana:<br />

Agregar en Additional Include Directories los directorios del JDK que contienen archivos<br />

de encabezados en lenguaje C que soportan programación en código nativo usando <strong>JNI</strong><br />

(modifique dependiendo de su directorio de instalación de JDK):<br />

• C:\Program Files\Java\jdk1.6.0_20\include<br />

• C:\Program Files\Java\jdk1.6.0_20\include\win32<br />

• Agregar también el directorio donde se encuentre math_Square.h a las librerías del<br />

proyecto en el caso de este ejemplo es el directorio<br />

C:\Users\ProgAva\Desktop\DADI\square<br />

Asegurarse de que la librería a generar<br />

corresponda a su plataforma Java. Por<br />

ejemplo para x64: Click en el botón<br />

Configuration Manager ubicado en la<br />

esquina superior derecha de la ventana<br />

de properties aparece:<br />

Selección de la plataforma


5. Basándose en los encabezados, escribir las implementaciones nativas de los métodos<br />

(en C / C + +)<br />

Ahora, tenemos que escribir la función de C que será nuestra implementación del método<br />

nativo. Para ello, en primer lugar, copie la firma de función en un programa en C / C + +<br />

del archivo math_Square.h. Visual Studio habrá creado un archivo de código fuente<br />

predeterminada a la que se puede agregar la función. En este proyecto llamado "Square",<br />

Visual Studio agregó un archivo llamado Square.cpp. Así que se copia la línea anterior en<br />

Square.cpp, añadiendo los nombres de las variables y un cuerpo de método. También se<br />

incluye el archivo de encabezados math_Square.h , ya que este a su vez incluye los<br />

encabezados <strong>JNI</strong>, que vamos a necesitar para acceder a funciones <strong>JNI</strong> y tipos de datos. El<br />

resultado es el siguiente:<br />

// Square.cpp : Defines the exported functions for the DLL application.<br />

#include "stdafx.h"<br />

#include <br />

#include "math_Square.h"<br />

#include <br />

<strong>JNI</strong>EXPORT jint <strong>JNI</strong>CALL Java_math_Square_getSquare(<strong>JNI</strong>Env * a, jobject b, jint x)<br />

{<br />

return x*x;<br />

}<br />

Implementación del método en C++<br />

6. Compilar la DLL


7. En el código de Java, llamar System.loadLibrary () para enlazar la librería<br />

Instalar la librería en donde la pueda localizar la JVM por ejemplo en la misma carpeta<br />

donde está el archivo Java. (La librería puede ser localizada haciendo click derecho sobre<br />

el nombre del proyecto y seleccionando Open Folder in Windows Explorer)<br />

Ir al directorio Square\x64\Debug<br />

Copiar el archivo Square.dll Y copiarlo en la carpeta donde está el .java<br />

Contenido final del directorio DADI/square


Ejecución del programa Java

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!