2012-10-06 23 views
1

我想從jni c代碼發送一個整數值到一個java函數。但是當我嘗試這樣做時,JVM崩潰了。我不知道原因。以下代碼告訴我如何一直試圖實現這一點。JVM崩潰,因爲我嘗試發送一個整數值到一個Java函數

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); 
} 

我已做了哪些錯誤?

+6

A1是未分配的指針。 – auselen

回答

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); 
} 
相關問題