草庐IT

java - 在 JNI 代码中抛出异常的最佳方法?

我想要一种在JNI代码中抛出异常的一致且简单的方法;处理链式异常的东西(隐含地来自env->ExceptionOccurred方法,或显式地通过参数,任何一种方式都很好)并且每次我想这样做时都可以节省我查找构造函数的时间。以上所有内容最好用C语言编写,尽管我可以根据需要从C++翻译它。SO上有没有人可以分享类似的东西? 最佳答案 我们只是为我们想要抛出的每种异常类型编写实用方法。以下是一些示例:jintthrowNoClassDefError(JNIEnv*env,char*message){jclassexClass;char*c

java - 在 JNI 代码中抛出异常的最佳方法?

我想要一种在JNI代码中抛出异常的一致且简单的方法;处理链式异常的东西(隐含地来自env->ExceptionOccurred方法,或显式地通过参数,任何一种方式都很好)并且每次我想这样做时都可以节省我查找构造函数的时间。以上所有内容最好用C语言编写,尽管我可以根据需要从C++翻译它。SO上有没有人可以分享类似的东西? 最佳答案 我们只是为我们想要抛出的每种异常类型编写实用方法。以下是一些示例:jintthrowNoClassDefError(JNIEnv*env,char*message){jclassexClass;char*c

java - 通过 JNI 在 C 和 Java 之间传递指针

目前,我正在尝试创建一个使用CUDA功能的Java应用程序。CUDA和Java之间的连接工作正常,但我遇到了另一个问题,想问一下,我的想法是否正确。当我从Java调用native函数时,我将一些数据传递给它,这些函数会计算一些东西并返回一个结果。是否有可能让第一个函数返回一个指向该结果的引用(指针),我可以将其传递给JNI并调用另一个对结果进行进一步计算的函数?我的想法是通过将数据留在GPU内存中并仅传递对它的引用以便其他函数可以使用它,从而减少将数据复制到GPU和从GPU复制数据的开销。尝试了一段时间后,我自己想,这应该是不可能的,因为指针在应用程序结束后被删除(在这种情况下,当C函

java - 通过 JNI 在 C 和 Java 之间传递指针

目前,我正在尝试创建一个使用CUDA功能的Java应用程序。CUDA和Java之间的连接工作正常,但我遇到了另一个问题,想问一下,我的想法是否正确。当我从Java调用native函数时,我将一些数据传递给它,这些函数会计算一些东西并返回一个结果。是否有可能让第一个函数返回一个指向该结果的引用(指针),我可以将其传递给JNI并调用另一个对结果进行进一步计算的函数?我的想法是通过将数据留在GPU内存中并仅传递对它的引用以便其他函数可以使用它,从而减少将数据复制到GPU和从GPU复制数据的开销。尝试了一段时间后,我自己想,这应该是不可能的,因为指针在应用程序结束后被删除(在这种情况下,当C函

OSS的Etag与MD5

OSSMD5一致性校验说明OSS上的Object会有ETag标签,ETag主要是用来判断服务端数据是否存在变化。但是ETag不一定等同于文件的MD5值,所以不建议作为校验数据一致性的依据。如果需要校验上传到OSS的文件和本地文件是否一致,可以在上传文件时携带文件的Content-MD5值。OSS会在接收文件时,将文件的MD5值和Content-MD5进行比对,两者一致时才可以上传成功,从而保证上传数据的一致性。PutObjectContent-MD5:用于检查消息内容是否与发送时一致。Content-MD5是由MD5算法生成的值。上传了Content-MD5请求头后,OSS会计算消息体的Con

java - 异步调用如何获取JNI接口(interface)指针(JNIEnv *)

了解到JNI接口(interface)指针(JNIEnv*)只在当前线程中有效。假设我在native方法中启动了一个新线程;它如何将事件异步发送到Java方法?因为这个新线程不能引用(JNIEnv*)。为(JNIEnv*)存储一个全局变量显然不起作用? 最佳答案 您可以通过JNIEnv->GetJavaVM获得指向JVM(JavaVM*)的指针。.您可以安全地将该指针存储为全局变量。稍后,在新线程中,您可以使用AttachCurrentThread将新线程附加到JVM,如果你是用C/C++创建的,或者只是GetEnv如果你在java

java - 异步调用如何获取JNI接口(interface)指针(JNIEnv *)

了解到JNI接口(interface)指针(JNIEnv*)只在当前线程中有效。假设我在native方法中启动了一个新线程;它如何将事件异步发送到Java方法?因为这个新线程不能引用(JNIEnv*)。为(JNIEnv*)存储一个全局变量显然不起作用? 最佳答案 您可以通过JNIEnv->GetJavaVM获得指向JVM(JavaVM*)的指针。.您可以安全地将该指针存储为全局变量。稍后,在新线程中,您可以使用AttachCurrentThread将新线程附加到JVM,如果你是用C/C++创建的,或者只是GetEnv如果你在java

android - 在jni文件夹android中生成文件的最简单方法

我想知道是否有一种方法可以比这样的命令更容易地在jni文件夹中生成.h文件javah-jni-classpathbin/classes/-djni/com.example.test_ndk.FibLib我的意思是我想自动化这一步所以我只需要写publicnativestaticlongfibNR(longn);然后eclipse会在jni文件夹中为我生成.h文件我该怎么做? 最佳答案 选项1:如果有所不同,您不必包含-jni选项。这是javah的默认选项。javah-classpathbin/classes/-djni/com.ex

android - 我可以在 Android 上的 JNI 库中使用 C++ 异常吗?

有什么方法可以在Android上的JNI(Javanative接口(interface))库中使用C++异常?编辑:我说的是完全在JNI库内部的C++异常处理。也就是说,异常在库中被抛出和捕获,它永远不会逃出库。根据Android文档(docs/CPLUSPLUS-SUPPORT.html),仅当我使用“GNUlibstdc++”作为C++运行时而不是默认时才支持异常。问题是文档还指出程序的所有部分必须使用相同的C++运行时:"YoucanonlyselectasingleC++runtimethatallyourcodewilldependon.Itisnotpossibletomi

java - Android JNI native 代码中的 C++ 对象是否调用垃圾回收?

那么,我有一个概念性的问题。我一直在Android上使用JNI来做低级音频“东西”。我已经用C/C++完成了大量的音频编码,所以我认为这不是什么大问题。我决定在我的“native”代码中使用C++(因为谁不喜欢OOP?)。我遇到的问题(对我来说)似乎是一个奇怪的问题:当我在C++代码中创建一个用于处理音频的对象时,我从未将这个对象传递给Java(也没有相反),调用这个对象的方法对象似乎经常调用垃圾收集。由于这是在音频回调中发生的,结果是音频断断续续,而且我经常收到如下消息:WAIT_FOR_CONCURRENT_GCblocked23ms但是,当我通过创建静态函数(而不是调用memeb