Ho un metodo JNI per accedere al metodo java che restituisce un oggetto Integer. Non voglio restituire il tipo primitivo int perché questo codice verrà modificato per gestire gli oggetti generici. Quello che segue è quello che ho. Non sono in grado di ottenere il valore dell'intero che ho superato. L'uscita sul lato C++ è qualcosa di simileJNI come accedere a Java Object (Integer)
value = 0x4016f3d0
Come posso ottenere il valore reale dell'oggetto intero che mi passa in C++ fine?
Per favore aiuto.
Grazie,
-H
GenericPeer.cpp
JNIEXPORT void JNICALL Java_GenericPeer_print (JNIEnv *jenv, jclass jcls, jobject data){
jclass peerCls = jenv->GetObjectClass(data);
jmethodID mGetValue = jenv->GetMethodID(peerCls, "getValue","()Ljava/lang/Integer;");
if(mGetValue == NULL){
return (-1);
}
jobject value = jenv->CallObjectMethod(data, mGetValue);
cout<<"value = "<<value<<endl;
}
GenericPeer.java
public class GenericPeer {
public static native void print(Data d);
static {
System.load("/home/usr/workspace/GenericJni/src/libGenericJni.so");
}
}
Data.j ava
public class Data {
private Integer value;
pubilc Data(Integer v){
this.value = v;
}
public Integer getValue() { return value; }
public void setValue(Integer value) {
this.value = value;
}
}
Test.java (classe principale)
public class Test {
public static void main(String[] args){
Integer i = new Integer(1);
Data d = new Data(i);
GenericPeer.print(d);
}
}
hi, sopra il codice non funziona per me .. – RAJESH
Perché 'Ljava/lang/Integer;', e non 'Ijava/lang/Integer;'? –