java - 使用 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);
}
}
感谢您的时间!
解决方案
推荐阅读
- angular - mat-sidenav-content 正在抛出 MatSidenavContainer 的没有提供者
- python - 仅在验证后才在前一个表单下方显示下一个表单
- sql - 如何从此字符串'opimus_rise_issue_command_201912.txt'中提取该月的最后一天日期
- c++ - 关于引用数组位置的问题
- android - Android NavController: How to open same fragment with same action
- javascript - 如何使用 Jquery 将一个 html 代码重用到另一个 html?
- java - 根据用户输入的值附加到 Stringbuilder 的方法
- c# - 如何正确请求 Azure 不记名令牌或为什么要求我发送“范围”参数?
- java - 在适用于 android 和 ios 的 Flutter 应用中应用深度链接
- android - No callback for startActivityForResult in case of MediaStore.INTENT_ACTION_VIDEO_CAMERA