首页 > 解决方案 > 使用 NewObject JNI 从 c++ 创建 java 实例时出现致命错误

问题描述

我正在尝试使用 JNI 从 c++ 调用 Java 方法。根据我的理解,当 C++ 想要访问非静态 Java 方法时,我们需要有 Java 实例才能访问这些方法。

我收到运行时错误,我无法理解错误的确切位置,但我的代码正在中断。我在创建实例时被 cout 跟踪并中断

错误是:V [libjvm.so+0x2c3253] methodHandle::methodHandle(Method )+0x33 *

我的代码是这样的:.h 文件

static jclass clsEventStatus;
static  jmethodID constructorEventStatus;
jobject EventStatusInstance;

.cpp 文件

jclass EventStatusJNI::clsEventStatus; jmethodID EventStatusJNI::constructorEventStatus;

int EventStatusJNI::initialize() {
  if(clsEventStatus==0) {
    clsEventStatus = StubJava::env->FindClass("metronome/EventStatus");//no error 
    if(clsEventStatus == 0){
      std::cout<<"class Eventstatus Not found";
    } 
    constructorEventStatus = StubJava::env->GetMethodID(clsEventStatus, "<init>", "()V");//no error
   
    return 0;
  }
  return 1;
}

EventStatusJNI::EventStatusJNI(){

EventStatusInstance = StubJava::env->NewObject(clsEventStatus, constructorEventStatus); //its breaking here when call happens
if(EventStatusInstance == 0 ){std::cout<<"No EventStatusInstance found ";}

}

在 .java 文件中:

public class EventStatus {
   
    public EventStatus(){
    System.out.println("Entered Event status.java");
    setStatusValue(EventStatusValue.PROCESSING);
    
  }
}

感谢您的时间!

标签: javac++java-native-interface

解决方案


推荐阅读