JNI有时会在env-> NewObject上崩溃?

时间:2019-04-17 20:07:26

标签: java java-native-interface

我试图在C语言中创建一个对象并将其传递给jvm。

java对象是这样的:

package mypackage;
public class Blub {
  public Blub(float a, float b) {
    // storing the floats
  }
}

C端初始化为:

jclass Blub_class = env->FindClass("mypackage/Blub");
jmethodID Blub_constructor = env->GetMethodID(Blub_class, "<init>", "(FF)V");

并使用以下内容创建实例:

jobject myInstance = env->NewObject(Blub_class, Blub_constructor, 0, 0);

在大多数情况下,它会失败-有时它会成功..? 真的很奇怪-如果它可以工作,那么它将在程序的整个运行过程中起作用,否则,它在首次执行NewObject时会失败

一些其他信息:

  • NewObject调用线程已附加到jvm
  • env是线程对jvm的本地引用
  • Blub_class和Blub_constructor由另一个线程获取并存储
  • 保证初始化线程在调用NewObject之前初始化方式
  • 在调试器中,NewObject的每个参数都可以使用

目前,我正在通过仅在jvm上调用仅具有原始参数的方法来解决此问题,效果很好。

我真的不知道我想念什么-.-我的工作有问题吗?

此外,它是如何失败的:

V  [jvm.dll+0x14a6a6]
C  [mylib.dll+0x1fae9]  JNIEnv_::NewObject+0x59

0 个答案:

没有答案