草庐IT

java - 在 JNI 中构建数组时在 SetObjectArrayElement 之后使用 DeleteLocalRef

在JNI中,我通过调用SetObjectArrayElement()插入一个在JNI代码中本地创建的java对象来构造一个大数组。我的问题是,在使用SetObjectArrayElement()将对象插入数组后,数组是否存储了一个引用,以便我可以使用DeleteLocalRef释放对插入对象的本地引用? 最佳答案 是的。jobjectArray指向一个引用数组。当您将该数组的成员设置为本地引用时,您已经对该对象进行了第二次引用。如果删除本地引用,数组中的引用将保留。垃圾收集器不会处理实际对象,直到没有剩余的可访问引用为止。

Java JNI调用加载库

如果我有两个本地调用已编译C代码的Java类,并且我在另一个类中调用这两个类,是否会影响内存?例如,我有A类和B类,它们都调用了native函数。它们是这样设置的:publicclassA{//declarethenativecodefunction-mustmatchndkfoo.cstatic{System.loadLibrary("ndkfoo");}privatestaticnativedoublemathMethod();publicA(){}publicdoublegetMath(){doubledResult=0;dResult=mathMethod();returndR

java - 不能将 java int 传递给 jni 函数

我在test.cpp中有一个简单的jni函数:#include#includeextern"C"{JNIEXPORTjintJNICALLJava_dri_put(JNIEnv*env,jstringjs,jintji){printf("%d\n",ji);intt=ji;printf("%d\n",t);intk=-3412;returnk;}}我的java类javatest.java:publicclassjavatest{publicstaticvoidmain(Stringargs[]){System.loadLibrary("test");intt=134;intk=dri.

java - 通过 JNI 从 Applet 调用 DLL

我有一个“概念验证”作品,它跨越了一些不熟悉的领域。我的任务是将EFTPOS机器连接到一个应用程序,该应用程序在我们的内部网上的浏览器中作为小程序运行。我暂时忽略了EFTPOSdll,并用我选择的语言(Delphi)创建了一个简单的JNI装饰DLL,它只将一个字符串记录到c:\中的文本文件,我可以从本地成功调用它Java应用程序。但是,当我创建一个applet来做同样的事情时,将它编译成一个.JAR,对JAR签名并尝试在网页上通过Javascript调用applet中的方法,但它失败了。与我一起工作的一位高级Java人员认为不可能让它工作,因为允许applet这样做本质上是“邪恶的”。

java - 将字符串的数组列表从 native java 返回到 JNI

ArrayListmyArraylist;publicArrayListgetData(){myArraylist=newArrayList();myArraylist.add("1267982563");myArraylist.add("2345678");myArraylist.add("5432789");returnmyArraylist;}如何在JNI端从上述方法中获取每个项目并推送到vector并从JNI返回到JNI层中的其他CPP调用。 最佳答案 将ArrayList转换为std::vector:jclassjava_

java - JNI 的用处

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我已经做了几年的Java开发人员,听说您可以使用JNI做一些非常有用和强大的事情。我不知道我是否只是不需要使用它,或者它是否与我不是很相关;但我根本不必碰它。我想知道Java这方面的用处是什么。例子会很棒。

java - JNI EnsureLocalCapacity——为什么?

在这里查看JNI文档:http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html具体的看EnsureLocalCapacity函数的描述中是怎么说的:Forbackwardcompatibility,theVMallocateslocalreferencesbeyondtheensuredcapacity.(Asadebuggingsupport,theVMmaygivetheuserwarningsthattoomanylocalreferencesarebeingcreated.IntheJD

java - 在 C (JNI) 中结束 Java 线程

亲爱的多线程/Java/C/JNI大师们,我有一个稍微具体的问题。我有一个生成线程的Java程序。在run()方法中,调用C(通过JNI),首先在TLS中分配线程局部变量,然后进入event_loop(因此线程的默认生命周期由该循环决定).我现在的问题是,如果出现类似SIGSEGV的情况,如何能够关闭/终止线程。重要的是整个进程和其中的其他线程可以继续。这就是我们使用TLS分离线程的原因。(我知道,有些人不鼓励这样做,当然做防御性编程是正确的,试图提前避免这种崩溃。这段代码仅供迁移期间使用,因为我们正在从C转换到Java.但由于我们拥有的资源很少,这将需要一些时间。)classMyTh

java - 为 JDK 10 中的类文件生成 JNI 头文件

Javanative接口(interface)(JNI)的一个组成部分是通过Cheader桥接JVM代码和native代码。过去生成这些头文件的方法非常简单:只需在类文件上调用命令行实用程序javah。然后,此过程将为任何标有native修饰符的方法生成原型(prototype)。然而,从Java10开始,javah实用程序hasbeenremoved,它的建议替换是javac的新标志“-h”。如果有可用的Java源文件,替换工作正常,但在只有编译的类文件可用的情况下就不够用了。(引发这个问题的问题是我试图从Scala源代码生成JNI绑定(bind)。我目前的方法是先编译它们,然后在生

Android Java代码与JNI交互 JNI方法Java类字段 (六)

🔥AndroidStudio版本🔥   🔥Java基础类型数据对应Native层的字母🔥 通过jni查找java某个类中相应字段对应的数据类型,需要使用到jni中的GetFieldID()函数jfieldIDGetFieldID(jclassclazz,constchar*name,constchar*sig){returnfunctions->GetFieldID(this,clazz,name,sig);}*|Java|JNI|*|boolean|Z|*|byte|B|*|char|C|*|short|S|*|int|I|*|long|J|*|float|F|*|double|D|🔥Jav