Utilizar el Java Native Interface (JNI)

El siguiente fragmento de c�digo Java define una clase llamada HelloWorld. Esta clase tiene un segmento de c�digo est�tico.

class HelloWorld {
    public native void displayHelloWorld();

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

.�Definir un M�todo Nativo

Todos los m�todos, tanto m�todos Java, como m�todos nativos, se deben definir dentro de una clase Java. Cuando se escribe la implementaci�n de un m�todo en un lenguaje de programaci�n distinto de Java, se debe incluir la palabra clave native como parte de la definici�n del m�todo dentro de la clase java. La clave native indica al compilador Java que la funci�n es una funci�n en lenguaje nativo. Es sencillo decir que la implementaci�n del m�todo displayHelloWorld() de la clase HelloWorld est� escrita en otro lenguaje de programaci�n porque la clave native aparece como parte de su definici�n de m�todo.

public native void displayHelloWorld();

Esta definici�n de m�todo en nuestra clase Java s�lo proporciona la firma del m�todo para displayHelloWorld(). No proporciona la implementaci�n para el m�todo. Se deber� proporcionar la implementaci�n para displayHelloWorld() en un fichero fuente separado en el lenguaje nativo.

La definici�n de m�todo para displayHelloWorld() tambi�n indica que el m�todo es un m�todo de ejemplar p�blico, no acepta ning�n argumento, y no devuelve ning�n valor. Para m�s informaci�n sobre los argumentos y los valores de retorno desde m�todos nativos puedes ver Programaci�n de Interface Nativo en Java.

.�Carga de la Librer�a

Se debe compilar el c�digo de lenguaje nativo que implementa displayHelloWorld dentro de una librer�a compartida (se har� esto en el Paso 5: Crear una Librer�a Compartida). Tambi�n se debe cargar la librer�a compartida dentro de la clase Java que la requiere. Esta carga de la librer�a compartida dentro de la clase Java mapea la implementaci�n del m�todo nativo a su definici�n.

Se utiliza el m�todo System.loadLibrary para cargar la librer�a compartida que se creo cuando compilamos la implementaci�n del c�digo. Este m�todo se coloca con un inicializador static. El argumento de System.loadLibrary es el nombre de la librer�a. El sistema utiliza un est�ndard, pero espec�fico de la plataforma, para convertir el nombre de la librer�a a un nombre de librer�a nativo. Por ejemplo, en Solaris convierte el nombre "hello" a libhello.so, mientras que en Win32 convierte el mismo nombre de librer�a a hello.dll.

El siguiente inicializador static de la clase HelloWorld carga la librer�a apropiada, llamada hello. El sistema de ejecuci�n ejecuta un inicializador est�tico cuando carga la clase.

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

.�Crear el Programa Principal

Tambi�n se debe crear un fichero fuente separado con una aplicaci�n Java que ejemplarize la clase que contiene la definici�n de m�todo nativo. Esta aplicaci�n Java tambi�n llamar� al m�todo nativo. Como es una aplicaci�n, debe tener un m�todo main. En un fichero fuente separado, que para este ejemplo hemos llamado Main.java, se crea una aplicaci�n Java que ejemplariza HelloWorld y llama al m�todo nativo displayHelloWorld().

class Main {
    public static void main(String[] args) {
        new HelloWorld().displayHelloWorld();
    }
}

Como se puede ver a partir del c�digo anterior, se llama a un m�todo nativo de la misma forma en que se llamar�a a un m�todo normal: s�lo a�adir el nombre del m�todo al final del nombre del objeto, separado con un punto ('.'). Una pareja de par�ntesis, ( ), sigue al nombre del m�todo y encierra los argumentos. El m�todo displayHelloWorld() no tiene ning�n argumento.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO