Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.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/5/spring-mvc/2.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
在JNI中传递对象总是返回NULL 我使用JNI将一个对象从C++传递给java。但是我在代码中的某个地方被卡住了 “GetMethodID”总是返回NULL并崩溃!下面是我使用的头文件和后面的cpp代码_Java_C++_C_Jakarta Ee_Java Native Interface - Fatal编程技术网

在JNI中传递对象总是返回NULL 我使用JNI将一个对象从C++传递给java。但是我在代码中的某个地方被卡住了 “GetMethodID”总是返回NULL并崩溃!下面是我使用的头文件和后面的cpp代码

在JNI中传递对象总是返回NULL 我使用JNI将一个对象从C++传递给java。但是我在代码中的某个地方被卡住了 “GetMethodID”总是返回NULL并崩溃!下面是我使用的头文件和后面的cpp代码,java,c++,c,jakarta-ee,java-native-interface,Java,C++,C,Jakarta Ee,Java Native Interface,我的意图是从JNI返回一个对象,我总是在JNI中得到它 以下cpp代码中的“emu\u响应\u构造函数Null” 不要试图自己编造JNI签名。使用javap-s的输出 在这种情况下,很明显,您的参数类型是无序的。 我认为正确的签名是“([BI)Lcom/em/Response;”,但不要相信我的话:始终使用javap-s 并修复您的代码,以便如果您确实从任何API获得意外结果,您不必打印它并继续,就好像该值是合法的一样。这就是导致崩溃的原因。您可以添加您的Java类吗?@ZagorulkinDm

我的意图是从JNI返回一个对象,我总是在JNI中得到它 以下cpp代码中的“emu\u响应\u构造函数Null”


不要试图自己编造JNI签名。使用javap-s的输出

在这种情况下,很明显,您的参数类型是无序的。 我认为正确的签名是“([BI)Lcom/em/Response;”,但不要相信我的话:始终使用javap-s


并修复您的代码,以便如果您确实从任何API获得意外结果,您不必打印它并继续,就好像该值是合法的一样。这就是导致崩溃的原因。

您可以添加您的
Java
类吗?@ZagorulkinDmitry我已经用Java类更新了我的帖子。还请显示
本机
方法,
Grabber.getProcessedImage()
。这可能是一个声明问题。@请解释为什么不应该使用javap-s来获得字母完美的JNI方法签名,和/或为什么不应该检查JNI API调用的结果。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_em_Grabber */

#ifndef _Included_com_em_Grabber
#define _Included_com_em_Grabber
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_em_Grabber
 * Method:    getProcessedImage
 * Signature: (II[B)Lcom/em/Response;
 */
JNIEXPORT jobject JNICALL Java_com_em_Grabber_getProcessedImage
  (JNIEnv *, jobject, jint, jint, jbyteArray);

#ifdef __cplusplus
}
#endif
#endif
JNIEXPORT jobject JNICALL Java_com_em_Grabber_getProcessedImage
  ( JNIEnv *env, jobject obj, jint jRows, jint jCols,jbyteArray jByteArray ){

         jclass emu_response = env->FindClass("com/em/Response");

         if (emu_response == NULL) {
             cout << "emu_response Null" << endl;
        }

         jmethodID emu_response_constructor = env -> GetMethodID(emu_response, "<init>", "(II[B)Lcom/em/Response;");
         if (NULL == emu_response_constructor ) {

             cout << "emu_response_constructor Null" << endl;

         }
   int number = 90;
   jobject jEmuResponse = env->NewObject ( emu_response,emu_response_constructor, jByteArray, number );

 return jEmuResponse;

}
public class Response {


    private int age;
    private byte[] result = null;


    public Response()
    {

    }
    public Response(byte[] result,int age) {
    this.age = age;
    this.result = result;
    }

    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    public byte[] getResult() {
    return result;
    }
    public void setResult(byte[] result) {
    this.result = result;
    }