如何从本机代码向Java方法传递null参数

如何从本机代码向Java方法传递null参数,java,java-native-interface,Java,Java Native Interface,我目前正试图调试一个Java记录器的问题,该记录器是从本机代码调用的 /* convert C to Java String */ java_string = (*env)->NewStringUTF(env, string); /* call log method on logger instance */ (*env)->CallVoidMethod(env, logger, log_method_id, java_string); 查看Java代码,我可以看到,如果Java

我目前正试图调试一个Java记录器的问题,该记录器是从本机代码调用的

/* convert C to Java String */
java_string = (*env)->NewStringUTF(env, string);

/* call log method on logger instance */
(*env)->CallVoidMethod(env, logger, log_method_id, java_string);
查看Java代码,我可以看到,如果Java_字符串错误地为null,这可能会给我们带来问题。我想暂时破解上面的代码,以返回一个Java空值,将结果失败与我们在字段中看到的结果进行比较。如何将java_字符串设置为java null

我尝试了以下方法:-

/* convert C to Java String */
java_string = NULL;

/* call log method on logger instance */
(*env)->CallVoidMethod(env, logger, log_method_id, java_string); 
但这似乎会导致字符串“null”被发送到Java方法


为了清楚起见,我无意故意将null传递给这个方法,我只想测试产生的NullPointerException会发生什么,因为我们是从C调用Java代码。

”但是这似乎会导致字符串“null”被发送到Java方法“你确定吗?不是记录器正在检测并处理
null
?坦白说,这似乎更有可能。@T.J.Crowder我相当肯定。在Java端,记录器使用equals方法将消息与最后一条消息进行比较。它在打印日志消息之前执行此操作。因为它在这一步中幸存了下来,所以我认为传入的消息不能为null。@草莓:这取决于,如果它是
lastMessage.equals(thisMessage)
,那么
thisMessage
null就不会有问题。但是
thisMessage.equals(lastMessage)
当然会抛出一个NPE。当然,金标准是在该方法的第一行设置一个断点,并实际查看参数。@T.J.Crowder谢谢您的输入,我现在正在使用调试器进行查看。@T.J.Crowder抱歉,您是对的。底层记录器不允许null并将其转换为字符串null。因此,我确信JNI NULL参数在Java代码中被解释为Java NULL。