1

jnic コードから Java 関数に整数値を送信しようとしています。しかし、これをやろうとすると、JVM がクラッシュします。理由はわかりません。次のコードは、私がこれを達成しようとしている方法を示しています。

Java コード :

class Tester {
public native void func();
public native void func_1(Tester T);
public native void func_2(String S);

public static void main(String args[]) {
   Tester tester = new Tester();
   tester.func();
}

public void printInteger(int x) {
    System.out.println(x);
}

static {
  System.loadLibrary("DailyTesters");
}
}

JNI C コード:

#include <stdio.h>
#include "Tester.h"

void Java_Tester_func
(JNIEnv *env, jobject obj) {
  jclass cls = (*env)->GetObjectClass(env,obj);
  jmethodID mid = (*env)->GetMethodID(env,cls,"printInteger","(I)V");
  jvalue *a1;
  a1->i = 2;
  (*env)->CallVoidMethodA(env,obj,mid,a1);
 }

私が犯した間違いは何ですか?

4

1 に答える 1

1

これを試して :

void Java_Tester_func
(JNIEnv *env, jobject obj) {
  jclass cls = (*env)->GetObjectClass(env,obj);
  jmethodID mid = (*env)->GetMethodID(env,cls,"printInteger","(I)V");
  jvalue a1,*arr;
  a1.i = 2;
  arr = &a1;
  (*env)->CallVoidMethodA(env,obj,mid,arr);
 }
于 2012-10-06T05:24:20.217 に答える