- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个带有一些 jni native 方法的 java 应用程序。其中之一是 readFile,它是这样调用的:
OutputStream outStream = null;
File file = new File("Alf.txt");
try {
outStream = new FileOutputStream(file);
myObject.readFile("TestFile.txt",outStream);
...
在我的 jni 实现中我这样做:
JNIEXPORT jint JNICALL Java_com_example_mylib_SomeClass_readFile
(JNIEnv *env, jclass, jstring java_string, jobject stream) {
jclass classOutputStream = env->FindClass("java/io/OutputStream");
if (classOutputStream == NULL)
{
Log::err("classOutputStream == NULL;");
return -1;
}
jmethodID OutputStream_write_ID = env->GetMethodID(classOutputStream, "write", "([BII)V");
if (OutputStream_write_ID == NULL)
{
return -1;
}
char* buf = "hello";
env->CallVoidMethod((jobject)stream, OutputStream_write_ID,buf,0,5);
当我调用 CallVoidMethod 时,我得到了
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f4a85a5e1e1, pid=25597, tid=139958068348672
#
# JRE version: Java(TM) SE Runtime Environment (8.0_25-b17) (build 1.8.0_25-b17)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.25-b02 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V [libjvm.so+0x6ad1e1] jni_GetArrayLength+0xb1
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /.../hs_err_pid25597.log
我检查过 - 没有变量 == NULL,我做错了什么?
最佳答案
C 字符数组不能与 Java 字节数组对象互换 - 创建和复制数据需要一些工作。
int len = strlen(buf);
jbyteArray arr = (*env)->NewByteArray(env, len);
(*env)->SetByteArrayRegion(env, arr, 0, len, (jbyte*)buf);
如果你需要一个字符串,它会更容易一些:
jstring jString = (*env)->NewStringUTF( env, buf );
关于java - CallVoidMethod jni 中的 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31123667/
我正在从我的 jni 类中调用一个非静态函数,但我的游戏得到了 NoSuchMethodError 我已经给出了下面的函数 jni类 void InitializeJni() { cocos2
我有一个带有一些 jni native 方法的 java 应用程序。其中之一是 readFile,它是这样调用的: OutputStream outStream = null; File file =
我正在尝试从 android-ndk 内发送短信。当我尝试调用 SmsManager 中的 sendTextMessage 方法时,我的应用程序崩溃,错误代码为 6(中止)。此外,我收到一条错误消息“
我正在尝试从 Android 应用程序中的 native C++ 代码调用 java 方法。当我尝试调用我的 Java 方法时发生异常。我看过几个例子,但我无法弄清楚我做错了什么。请帮助我。 Java
我正在尝试从 Android 应用程序中的 native C 代码调用 java 方法。使用 JNI 这听起来很简单,但我的代码在最终调用方法本身时总是崩溃。这是我的代码: native C 代码:
我的目标是在 C 代码中建立一个无限循环,执行将 String 传递给 Java 函数的回调。然后,Java 函数使用String 来更新文本框的内容。问题是回调尝试生成以下错误: JNI DETEC
当为我的 UDP 程序调用我的 JNI 函数 CallVoidMethod 时,我的程序崩溃了。我无法从 logcat 破译问题。任何帮助将不胜感激。 我的代码 fragment : JNI 函数:
我想传递从 Java 类中的 native 方法计算的数组数组。为此,我想从 native 代码调用方法 setTarghet 来设置每个 vector 场。我认为这是个好主意。这是一个 Java 类
我是一名优秀的程序员,十分优秀!