Forum: Diğer Konular RSS
Java Native Interface - GetObjectClass ve FindClass Kullanım Alanları
İbrahim #1
Üye Eki 2015 tarihinden beri · 126 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Java Native Interface - GetObjectClass ve FindClass Kullanım Alanları
Selamün Aleyküm;

JNI'de class not found sorununu çözünce başka bir sual aklıma takıldı. Ben Oracle'ın sitesinden JNI öğreniyorum. FindClass ve GetObjectClass adlı iki fonksiyon var. Lakin FindClass java sınıfını, var olan Java sınıflarını almak için kullanıyoruz, fakat GetObjectClass  fonksiyonunu, bir nesnenin sınıfını almak için kullanıyormuşuz. Benim burada anlamadığım bu 2 fonksiyonu birbirlerinin yerine kullanıyorlar. Mesela:
jclass clazz = env->FindClass("com/package/ExampleClass");
jmethodID method_id = env->GetStaticMethodID(clazz, "javaMethod", "()V");
env->CallStaticVoidMethod(clazz, method_id);
Bu şekilde Java metodunu static yapmak mecburiyetindeyim, yoksa hata veriyor. Lakin benim Java metotlarından bazılarını statik yapmamam lazım. O zaman da bu şekilde kod çalışmıyor (GetStaticMethodID yerine GetMethodID ve CallStaticVoidMethod yerine de CallVoidMethod kullanıyorum). FindClass yerine bazı kişiler GetObjectClass kullanmış şu şekilde:
jclass clazz = env->FindClass("com/package/ExampleClass");
jclass class2 = env->GetObjectClass(clazz);
jmethodID method_id = env->GetMethodID(class2, "javaMethod", "()V");
env->CallVoidMethod(class2, method_id);
Lakin bu şekilde hata alıyorum ve Java tarafında javaMethod'u static yapıp ilk yazdığım kodu kullanmak zorunda kalıyorum. Dediğim gibi bazı metotlarım static olmamalı. Ama o zaman da metotu çağıramıyorum. Acaba GetObjectClass tanımında geçen "bir nesnenin sınıfını döndürür." derken nesneden kastı nedir? Ayrıca şekildeki bir Java metodunu:
public class ExamleClass
{
  public void javaMethod()
  {
    System.out.println("Hello");
  }
}
nasıl çağırabilirim (metot static olmamalı)? Oracle bağlantısı: http://docs.oracle.com/javase/7/docs/technotes/guides/jni/…
Teşekkürler!
Bu mesaj İbrahim tarafından değiştirildi; zaman: 2017-01-08, 13:01.
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-03-29, 06:14:51 (UTC -07:00)