CodeBlanks Logo Icon CodeBlanks

JNIEnv

JNIEnv ile yerel çağrı ortamını öğrenirsin.

JNIEnv arabirimi

Her JNI C işlevinin ilk parametresi JNIEnv*'dir. Bu işaretçi, C tarafından JVM ile konuşmayı sağlar: Java metotlarını çağırma, nesne oluşturma, dizi ve string dönüştürme gibi işlemler env->... üzerinden yapılır.

Statik native metotlarda ikinci parametre jclass (sınıf), örnek metotlarda jobject (this) olur. Bu ikisi olmadan hangi sınıf veya nesne üzerinde çalıştığını bilemezsin.

C işlev adlandırması

JNI, C işlevini Java metoduyla eşleştirmek için sabit bir ad kullanır: Java_paketAdı_SınıfAdı_metotAdı. Paketteki noktalar alt çizgi olur. Örneğin NativeOps.sum için C işlevi Java_NativeOps_sum olarak adlandırılır.

Aşırı yüklenmiş metotlarda isim çakışmasını önlemek için imza eki (__II gibi) eklenir. Bu adlandırma JNI bağlama mekanizmasının temelidir.

Uygulama C işlev adını üreten sınıfı yaz

class JniCall tanımla; String className ve String method alanları ve bunları atayan JniCall(String className, String method) yapıcısı olsun. String cName() metodu "Java_" + className + "_" + method döndürsün. main içinde JniCall c = new JniCall("NativeOps", "sum"); oluştur ve System.out.println(c.cName()); ile yazdır.

Başlangıç kodu

Main.java
// JniCall sınıfını tanımla: className, method alanları, yapıcı ve cName metodu

// Main: bir JniCall örneği oluştur ve cName çıktısını yazdır

Örnek çözüm

Main.java
class JniCall {
    String className;
    String method;
    JniCall(String className, String method) {
        this.className = className;
        this.method = method;
    }
    String cName() {
        return "Java_" + className + "_" + method;
    }
}

public class Main {
    public static void main(String[] args) {
        JniCall c = new JniCall("NativeOps", "sum");
        System.out.println(c.cName());
    }
}

Beklenen çıktı

Java_NativeOps_sum

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 JNI parametre türlerini eşleştir

Kavram Anlamı
JNIEnv* İlk parametre
jclass Statik metotta sınıf
jobject Örnek metotta this
jint int karşılığı

2 C işlev adını tamamla

Soru
Java_____(JNIEnv* env, jclass cls, jint a, jint b)
Cevap
Java_NativeOps_sum(JNIEnv* env, jclass cls, jint a, jint b)

Açıklama: C işlevi Java_NativeOps_sum olarak adlandırılır.

3 JNIEnv* ne işe yarar?

  • Sınıfı derler
  • Thread başlatır
  • Dosya okur
  • C'den JVM'e erişir Doğru cevap

Açıklama: JNIEnv* üzerinden C, Java metotlarını çağırır ve nesne oluşturur.

Uzman bölümündeki tüm dersler