Sponsor Reklam 


19.09.2008 (02:12)

 native Anahtar Sözcüğü, Keyword 
Başka dillere ait programları kullanmak istersek Java buna Java Native Interface (JNI) mekanizması ile izin verir. Bu amaçla native anahtar sözcüğü kullanılmaktadır.

Doğal (native) bir metot şu şekilde deklare edilir:

public native int hesapla();

Görüldüğü gibi metodun gövdesi yoktur. C'de yazılmış bir programı çağırmak için JNI kullanılmaktadır. Öncelikle native metodu tanımladığımız yerde DLL yuklenmelidir.

NativeDemo class'ı içinde yer alan bir örnek:

public native int hesapla();
static {
  System.loadLibrary("NativeDemo");
}

System sınıfının loadLibrary() metodu static olarak tanımlanmıştır, bu nedenle de static blok kullandık. NativeDemo ile belirtilen de Windows için .DLL uzantılı varsayılan dosyadır.

NativeDemo.h'ı üretmek için javah.exe kullanılmaktadır. javah.exe'nin yeri SDK (veya JDK) içinde bin klasörü altındadır. Şu komut ile NativeDemo.h üretilir:

javah -jni NativeDemo

Tabi bunun gerçekleşebilmesi için öncelikle NativeDemo.java'nın derlenmiş olması ve class'ının üretilmiş olması gerekmektedir. Sonuç olarak elde edilen NativeDemo.h, derleyici tarafından otomatik olarak oluşturulan jni.h kütüphanesi de include eder:
#include <jni.h>
Ayrıca şu fonksiyonu da prototip olarak tanımlar:
JNIEXPORT void JNICALL Java_NativeDemo_hesapla (JNIEnv *, jobject);
Şimdi NativeDemo.h NativeDemo.c olarak oluşturulan dosyada include (dahil) edilebilir.

NativeDemo.c:
//Kütüphaneler dahil edilir
#include <jni.h>
#include <stdio.h>
#include "NativeDemo.h"

// İşlev yapacak fonksiyon yazılır
JNIEXPORT void JNICALL Java_NativeDemo_hesapla (JNIEnv *env, jobject obj) {
  printf("Native Metot Çağrıldı");
}

Son olarak elde edilen NativeDemo.c dosyasından loadLibrary() metodunun anlayacağı NativeDemo.dll dosyasının üretilmesi gerekmektedir. Bunun için de C/C++ derleyicileri kullanılır. Şu komut çalıştırılır:
Cl /LD NativeDemo.c

Komutlar çalıştırılırken ilgili dosyaların olduğu yerler, (path'ler) seçilmelidir.

Native metotların dezavantajları şunlardır:
* Doğal (native) metotlar Java programına dahil edildikleri için buralarda yapılacak değişiklikler güvenlik sorunları çıkarabilir.
* Doğal (native) kod DLL içinde tutulduğu için işletim sistemine ve CPU'ya bağımlıdır. Bu nedenle native metotların kullanıldığı Java programları taşınabilir değildir.
Imza: admin








Yazilar kaynak gosterilmeden kopyalanamaz © www.kodcu.net // Twitter