草庐IT

motion-tracking-jni-example

全部标签

java - JNI FindClass 找不到使用 jar 的类

我正在开发一个项目,其中一些Java函数必须使用JNI从C++代码中调用。我已经尝试使用一个简单的Java类,但是当我开始在我的Java项目中使用额外的.jar时,JNI的FindClass函数找不到我的类。我做了一些研究并阅读了有关classpath的内容,如果它使用额外的库,编译.java文件需要它,但是FindClass返回null那种情况。这是我的代码的基本结构JavaVMOptionoptions[2];JNIEnv*env;JavaVM*jvm;JavaVMInitArgsvm_args;longstatus;jclasscls;jmethodIDmid;jintsquar

java - 如何在 JNI 中访问从 C++ 返回 java.lang.String 的 Java 方法的返回值?

我正在尝试从C++调用的Java方法传回一个字符串。我无法找出应该调用什么JNI函数来访问该方法并返回一个jstring值。我的代码如下:C++部分main(){jclasscls;jmethodIDmid;jstringrv;/**...omittedcode...*/cls=env->FindClass("ClassifierWrapper");mid=env->GetMethodID(cls,"getString","()Ljava/lang/String");rv=env->CallStaticMethod(cls,mid,0);constchar*strReturn=env-

java - 使用 JNI 加载另一个 JNI 库?

我需要实现一个本地方法,比方说“publicnativevoidsomeFunc();”。我有两个库,libabc.so和libdef.so。Java使用System.loadLibrary();加载libabc.so(它没有实现该方法),但JNI实现在libdef.so中。目前,我正在libabc.so中执行以下操作。JNIEXPORTjintJNICALLJNI_OnLoad(JavaVM*jvm,void*reserved){JNIEnv*env;jclasscls;jmethodIDget_load_id;jstringname;jvm->GetEnv((void**)&env

java - JNI 将空参数传递给 Java 方法

编辑我终于发现问题是由null值毕竟不是null引起的,因为其中一个构造函数没有将值初始化为零。有了这些知识,我想将我的问题改写为以下内容:如果参数应该为null,通过JNI将NULL/0/nullptr传递给Java方法是否安全?到目前为止,我找到的来源给出了不同的结果——其中一些人说在使用JNI时,C语言中的NULL和Java中的null是一回事。有些,例如remudada的回答中链接的那个,表明它可能不完全正确。老问题在使用JNI时是否可以使用空参数调用Java方法?我试过传递null(0、NULL或nullptr),但这会导致段错误。我也尝试过使用null参数的NewGloba

java - 无法使用JNI从java调用C++的成员函数

我按照以下链接中给出的说明进行操作CallcfunctionfromJava之后我就可以调用C++函数了。但是现在我想从Java调用C++类的成员函数。为了清楚地描述它,我引用了下面的场景。java。有一个类叫做HelloWorld.java它有一个名为print()的原生函数现在使用Java的JNI我创建了HelloWorld的等效头文件。之后我写了实现HelloWorld.cpp中的这个头文件现在我想从“HelloWorld.cpp”调用“rectangle.cpp”的成员函数我创建了“矩形”对象,并且调用了它对应的函数。但是在编译代码时它给了我一个错误称为“未解析的外部符号”。在

c++ - 使用 JNI 调用 API 创建 java7 JVM

我们在Java7中有一个类,需要从native代码加载它。我已经将java6与JNI一起使用,但java6无法加载该类。所以我安装了新的JDK,更改了我的VC项目中的包含目录和链接引用等。一切都很好,直到我想从JNI启动jre7:JNI_CreateJavaVM采用vm_args.version参数中的java版本,但没有定义高于1.6的版本。JavaVMInitArgsvm_args;...vm_args.version=JNI_VERSION_1_6;vm_args.nOptions=2;vm_args.options=options;vm_args.ignoreUnrecogni

java - 如何以定义明确的线程安全方式将 C++ 字符串传递给 Java JNI?

有一个C++函数,通过JNI从Java代码调用。我想将底层的c字符串正确地传递给Java,所以我做了以下安排://main.cppstringglobal;constchar*data()//CalledexternallybyJNI{return(global=func_returning_string()).data();//`.data()`=`.c_str()`}但在这种情况下,函数data()不再是线程安全的。在传递字符串而不导致任何未定义行为的情况下实现线程安全的最佳方法是什么? 最佳答案 Iwanttopasstheu

智慧自助餐饮系统(SpringBoot+MP+Vue+微信小程序+JNI+ncnn+YOLOX-Nano)

一、项目简介本项目是配合智慧自助餐厅下的一套综合系统,该系统分为安卓端、微信小程序用户端以及后台管理系统。安卓端利用图像识别技术进行识别多种不同菜品,识别成功后安卓端显示该订单菜品以及价格并且生成进入小程序的二维码,用户扫描后在小程序进行付款和提交订单,用户也可查看订单和菜品等信息,管理员在Web后台管理系统进行信息查看餐厅运营情况和管理菜品、订单评价等信息。本系统涉及的论文文献,可以进行参考和引用。《基于图像识别的智慧餐饮管理系统》《YOLOX-NanoIntelligentandefficientdishrecognitionsystem》二、涉及技术1、后端:SpringBoot、Spr

c++ - 使用 JNI (C++) 从 native 线程调用 Java 方法时出现问题

我有一个JNI问题,希望有人能帮我解决。我正在尝试从native线程调用名为LUSOutputJNI的Java类的构造函数。它在这个特定类的FindClass(...)上一直失败。代码如下:LOGE("1");JNIEnv*env=NULL;LOGE("2");intres=-1;res=g_vm->AttachCurrentThread(&env,NULL);if(env==NULL){LOGE("envisNULL,AttachCurrentThreadfailed");;}if(res>=0)LOGE("AttachCurrentThreadwassuccessful");jcl

java - 从 JNI 代码检查 Java 类中是否存在可选字段或方法

我有一个Java类,可以对其进行子类化以添加额外的字段。有一个相应的C++JNI方法将与该字段交互。但是,我希望JNI代码同时处理基类和子类,这意味着它必须检测该字段是否存在。我的(简化的)JNI代码如下所示:fid=j.GetFieldID(jc,UTF8_SECPARM,SIG_SECPARM);if(fid==0)return;...continuewithfid...虽然GetFieldID()方法返回NULL,但应用程序在处理的某个进一步点出现异常,这似乎与此代码无关。然而,它在某种程度上是相关的,因为如果我只是在GetFieldID()方法之前返回,则没有异常(except