【问题标题】:Return code of JNI_CreateJavaVMJNI_CreateJavaVM 的返回码
【发布时间】:2017-05-05 17:36:57
【问题描述】:

我找到了http://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/invocation.html

是 JNI 调用函数的文档。

但是例如,如果我打电话:

JNI_CreateJavaVM

有这个技术说明:

https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/invocation.html#JNI_CreateJavaVM

我知道返回码是一个提示:

  • 如果函数返回0 ok
  • 如果函数的返回为负,则不正常或有问题。

上述方法 JNI_CreateJavaVM 的文档说:

RETURNS:
Returns JNI_OK on success; returns a suitable JNI error code (a negative number) on failure.

但我不知道真正的结果是什么,因为它没有说明可能的错误代码。

所以我无法创建任何 JVM,因为它给了我一个 *jvm 指针 null,并且错误代码是 -1。

是否有 JNI 的“javadoc”?

【问题讨论】:

  • 这是对站外资源的请求,离题了。
  • 也许不是因为它是编码错误问题而不是资源问题。
  • 您已经在查看官方 JNI 规范(不要被其 URL 中的“技术说明”欺骗了)。据我所知,该文档所引用的错误代码没有官方文档。但这似乎是一个 X-Y 问题:真正的问题似乎是“为什么我的 JNI_CreateJavaVM() 呼叫总是失败?”如果您提供minimal reproducible example,那么我们可能会在这方面提供更多帮助。
  • 总是失败。我会尝试提供更多信息...这是有关此方法的所有文档吗?是失败。我怎么知道错误代码是什么?不应该在某个地方吗?我应该下载JNI c++源代码来检查错误吗?

标签: java java-native-interface


【解决方案1】:

jni.h 定义了 JNI 函数可能的返回值:

#define JNI_OK           0                 /* success */
#define JNI_ERR          (-1)              /* unknown error */
#define JNI_EDETACHED    (-2)              /* thread detached from the VM */
#define JNI_EVERSION     (-3)              /* JNI version error */
#define JNI_ENOMEM       (-4)              /* not enough memory */
#define JNI_EEXIST       (-5)              /* VM already created */
#define JNI_EINVAL       (-6)              /* invalid arguments */

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 2013-01-07
  • 2011-11-01
  • 1970-01-01
相关资源
最近更新 更多