1 / 19

Introdução à Programação Orientada a Objetos com Java

Introdução à Programação Orientada a Objetos com Java. Java Native Interface JNI. Adeline de Sousa Silva Centro de Informática Universidade Federal de Pernambuco. O que é JNI ?.

brice
Télécharger la présentation

Introdução à Programação Orientada a Objetos com Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introdução à ProgramaçãoOrientada a Objetos com Java Java Native Interface JNI Adeline de Sousa Silva Centro de Informática Universidade Federal de Pernambuco

  2. O que é JNI ? É uma interface que permite executar código nativo (dependente da máquina local) escrito em outra linguagem dentro da sua JVM. O objetivo desta aula é mostrar os passos básicos para executar um método nativo

  3. Quando usar métodos nativos? • Quando já existe uma grande quantidade decódigo extensivamente testado e depurado escrito em outra linguagem e levaria tempo para portá-lo para Java, depurá-lo e testá-lo. • Quando a aplicação requer acesso a recursos da máquina • Quando a performance é parte crucial da aplicação

  4. Passos para escrever um método nativo • Escrever o arquivo java, contendo a assinatura de um método nativo • Compilar o programa java, usando o javac • Gerar o arquivo de cabeçalho com o aplicativo javah • Alterar o arquivo de cabeçalho, para dar nome aos parâmetros do método

  5. Passos para escrever um método nativo (cont.) • 5. Escrever o arquivo C, que implementa o método definido no arquivo de cabeçalho • 6. Compilar o arquivo C e gerar uma biblioteca (Unix, Linux) ou uma DLL(Windows) • 7. Alterar o programa Java, para que ele possa carregar a biblioteca gerada no passo anterior • 8. Recompilar o programa Java

  6. Declarando o método nativo public class HelloNative { ... public native void sayHello(); } A classe em Java só possui a assinatura do método nativo Modificador “native” indica que o método é nativo

  7. Compilando o programa Java e gerando o arquivo de cabeçalho Agora, basta compilar o programa: javac HelloNative.java E gerar o arquivo de cabeçalho: javah HelloNative

  8. O arquivo de cabeçalho #include <jni.h> #ifndef _Included_HelloNative #define _Included_HelloNative #ifdef __cplusplus extern "C" { #endif JNIEXPORT void JNICALL Java_HelloNative_sayHello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif Falta dar nome aos parâmetros

  9. O arquivo em C #include <stdio.h> #include "HelloNative.h" JNIEXPORT void JNICALL Java_HelloNative_sayHello (JNIEnv *env, jobject obj) { printf("\nHelloWorld!!!\n"); } Código que será executado, quando o método java for chamado.

  10. Compilando o arquivo no Unix gcc –G –I/usr/local/java/jdk1.2.2/include \ -I/usr/local/java/jdk1.2.2/include/solaris \ HelloNative.c –o hello.lib

  11. Compilando o arquivo no Windows (MS Visual C++) • No menu File, escolha new • Na Wizard New, escolha DLL • Na Wizard DLL, escolha Empty DLL • No menu project, escolher Add to Project, depois Files • Inserir os arquivos .c e .h

  12. Compilando o arquivo no Windows (MS Visual C++) • No menu Tools, escolher Options, depois Directories e adicionar os paths do jdk1.2.2\include e jdk1.2.2\include\win32 • No menu Build, escolher Build DLL • São gerados vários arquivos, mas você só precisa importar a DLL.

  13. Reescrevendo o programa Java public class HelloNative { public native void sayHello(); static { System.load(“/home/adss/Hello.lib”); } } Bloco estático. É executado antes do primeiro uso da classe

  14. Tipos • É preciso fazer conversões de tipos entre a linguagem Java e a linguagem C. Principalmente porque Java tem um sistema de tipos forte e o tamanho em bytes dos tipos para Java independe de plataforma, enquanto que em C isso não é verdade.

  15. boolean byte char short int long float double jboolean jbyte jchar jshort jint jlong jfloat jdouble Tipos Java X Tipos C Java C

  16. boolean[] int [] double[] Object[] jbooleanArray jintArray jdoubleArray jobjectArray Tipos Java X Tipos C (cont.)

  17. Tipos • Matrizes • São tratados como jobjectArray, onde cada jobject é um jxxxArray • Strings • Precisam ser tratadas de forma especial pois Strings em Java são bem diferentes de Strings em C

  18. Algumas funções JNI • Toda função JNI é invocada através do ponteiro env, que é passado sempre como primeiro argumento em um método nativo e é um ponteiro para várias funções. • Toda função invocada, tem como primeiro argumento o ponteiro env. • Ex: (*env) -> GetObjectClass(env,obj);

  19. Algumas funções JNI • Funções que permitem acessar informações a respeito da classe: • getObjectClass(env, ref_obj) • getFieldID(env,ref_classe,nome_attr, tipo_attr) • getXXXField(env, ref_obj,field_ID) • getMethodID(env, ref_classe,nome_met, assinatura)

More Related