小编K-O*_*K-O的帖子

如何从C++调用Java方法(java返回String [])?

据我所知,我不能从C++中调用将从Java字符串数组返回的方法,所以只有这个解决方案是循环调用方法,它将返回数组元素,但是如何将它们存储在C++数组中呢?

在Java中我有方法:

public static String getData(int index){ return arry[index]; }
Run Code Online (Sandbox Code Playgroud)

在C++中:

char * args[10];
for (int i = 0; i < arrayLength; i ++) {
    jmethodID mid = env->GetStaticMethodID(INF.cls_JSox, "getData",(I)Ljava/lang/String;");
    jobject result = env->CallStaticObjectMethod(cls, mid, num, i);
    const char *nativeString = env->GetStringUTFChars( (jstring) result, 0);
    const size_t len = strlen(nativeString);
    cout << "copying... \n";
    strncpy(args[i], nativeString, len);
    env->ReleaseStringUTFChars( (jstring)result, nativeString);
}
Run Code Online (Sandbox Code Playgroud)

但是当i= 1时,我在Java中遇到内存冲突错误.如何正确地将接收到的字符串中的数据复制到char * args[10]?从Java传递的每个字符串的长度大约是3-5个字符.

arrays string java-native-interface

3
推荐指数
1
解决办法
5092
查看次数

从floatbuffer转换为byte []

我正试图找到一种在java中使用jack-audio的方法.我已经设法创建基于jnajack的包装器来获取从jacks的端口到java应用程序的音频(原始的jnajack不能与jack 1.9.8一起使用),但是我找不到操作数据的方法.我开始了List<FloatBuffer>,为了进一步的数据操作,我需要将其转换为byte[].

简单来说......首先我想将数据保存到文件中,但据我所知,java sound api只能保存来自TargetDataLine和/或的数据byte[].我怎样才能转换FloatBufferbyte[]?我能找到的唯一方法是以floatbuffer.get(float[])某种方式(不知道如何)转换float[]byte[].

java floatbuffer

2
推荐指数
1
解决办法
3369
查看次数