call从c获取字符串参数的java方法

cmssoen2  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(370)

我有一个java方法 java.lang.String 争论。当我从c打电话的时候,我总是收到信号 NewStringUTF .
如何使用调用java方法 char * 字符串?

// Java
void doSomething(String str) { … }
// C
void Java_some_very_long_function_name(JNIEnv *env, jobject thi)
{
    jclass clas = (*env)->GetObjectClass(env, thi);
    jmethodID method = (*env)->GetMethodID(env, clas, "doSomething", "(Ljava/lang/String;)V");

    jstring str = (*env)->NewStringUTF(env, strdup("My String")); // Segfaults here

    // TODO Call the method
}

它发生在 NewStringUTF 执行,而不是在 NewStringUTF 打电话。

art::FaultManager::HandleFault(int, siginfo*, void*) 0x00000000eae9efa4
art::art_fault_handler(int, siginfo*, void*) (.llvm.2308358812779254744) 0x00000000eae9eccb
___lldb_unnamed_symbol25$$app_process32 0x000000005c58cfe1
___lldb_unnamed_symbol2$$libc.so 0x00000000edd18180
art::Thread::DecodeJObject(_jobject*) const 0x00000000eb244c3f
<unknown> 0x00000000ec29f05d
<unknown> 0x000000005c58b000
Java_very_long_name foo.c:761
[…]
wj8zmpe1

wj8zmpe11#

看起来故障是由调试器引起的。当我没有在本机方法中停止执行(使用断点)时,它运行起来没有任何问题。

相关问题