Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使jstring脱离jobject?c++;_Java_C++_Dll_Java Native Interface - Fatal编程技术网

Java 如何使jstring脱离jobject?c++;

Java 如何使jstring脱离jobject?c++;,java,c++,dll,java-native-interface,Java,C++,Dll,Java Native Interface,我正在尝试从jobject中获取字符串属性。我找不到任何解决问题的方法,谷歌也没有帮助 这是我的Java类: public class HumanBean { String name; int alter; int gehalt; double gehaltDouble; ....getter and setter... } CPP文件-注释代码是我试图从jobject中提取名称字符串的地方 Human createHuman(JNIEnv *env

我正在尝试从jobject中获取字符串属性。我找不到任何解决问题的方法,谷歌也没有帮助

这是我的Java类:

public class HumanBean {

    String name;
    int alter;
    int gehalt;
    double gehaltDouble;

    ....getter and setter...
}
CPP文件-注释代码是我试图从jobject中提取名称字符串的地方

Human createHuman(JNIEnv *env, jclass cls, jobject javaObject) {
    jclass cls = (*env).GetObjectClass(javaObject);

    //jfieldID fidInt = (*env).GetFieldID(cls, "name", "Ljava/lang/String;");
    //jstring name = ??????????????????????

    jfieldID fidInt = (*env).GetFieldID(cls, "alter", "I");
    jint alter = (*env).GetIntField(objarg, fidInt);

    jfieldID fidInt = (*env).GetFieldID(cls, "gehalt", "I");
    jint gehaltInt = (*env).GetIntField(objarg, fidInt);

    jfieldID fidInt = (*env).GetFieldID(cls, "gehaltDouble", "D");
    jdouble gehaltDouble = (*env).GetDoubleField(objarg, fidInt);

    Human newHuman = Human(alter, name, gehaltDouble, gehaltInt);

    return newHuman;
}

我认为这会奏效:

jfieldID fidName = (*env).GetFieldID(cls, "name", "Ljava/lang/String;");
jstring nameString = (jstring)(*env).GetObjectField(cls, fidName);

不相关,但请注意,
(*foo).method(…)
最好写成
foo->method(…)
这里的关键点是
jstring
继承自
jobject
。这种向下转换是安全的(毕竟,您正在检索一个
字符串
),但编译器无法知道这一点。