2014-08-31 130 views
1

在C JNI我的第一個函數的代碼是C JNI調用Java功能

void fun1() 
{ 
    jmethodID java_fun = (*global_env)->GetMethodID(global_env,cls_Env, "test1", "()V"); 
    (*global_env)->CallVoidMethod(global_env,(*global_obj), java_fun); 
} 

我的第二個是

void fun2(int x) 
{ 
    jmethodID java_fun = (*global_env)->GetMethodID(global_env,cls_Env, "test2", "([I)V"); 
    (*global_env)->CallVoidMethod(global_env,(*global_obj), java_fun,(int)x); 
} 

在我的Java方面的第一個C函數的代碼是

private void test1() 
{ 
    System.out.printf("test1"); 
    callfunction(); 
} 
void callfunction() 
{ 
    System.out.printf("how i can get here??"); 

} 

第一個問題是我怎樣才能從C調用callfunction()?

現在對於第二個C函數的第二個Java代碼

public int var1; 
private void test2(int x) 
{ 
    System.out.printf("test2"); 
    var1=x; 
} 

第二個問題是如何從C面保存我的數據在Java方面?

感謝

+0

你爲什麼不定義'jmethodID'爲** callfunction()**?看來你是在** test2 **方法的正確軌道... – 2016-06-27 16:08:28

回答

1

有在fun2()一個錯字:應改爲GetMethodID(global_env, cls_Env, "test2", "(I)V");(在[是錯誤的)。

如果你想打電話callfunction()由C直接使用

GetMethodID(global_env, cls_Env, "callfunction", "()V"); 
+0

可以請你告訴我如何啓用自動完成/ Intellisense的日食,而在Android – 2014-09-03 07:48:35

+0

@james使用NDK,它應該是失敗-the盒;有許多小怪癖可能會出錯,他們肯定會在某個時刻出現。從Eclipse中刪除項目並重新導入項目有時可以解決問題。 – 2014-09-03 11:28:49

+0

如何在NDK中進行編碼?因爲NDK C apis沒有正確記錄。至少提供一些步驟來啓用自動完成。這是我的問題http://stackoverflow.com/questions/25618201/how-to-enable-auto-complete-intellisense-for-ndk-in-eclipse – 2014-09-03 11:38:07

0
Q1: 

void fun1() 
{ 
    jmethodID java_fun = (*global_env)->GetMethodID(global_env, cls_Env, "test1", "()V"); 
    (*global_env)->CallVoidMethod(global_env, global_obj, java_fun); 

} 

Q2: 
void test2(int x) 
{ 
    System.out.printf("test2"); 
    var1=x; 
} 

void fun2() 
{ 
    int i = 2; 
    jmethodID java_fun = (*global_env)->GetMethodID(global_env, cls, "test2", "(I)V"); 
    (*global_env)->CallVoidMethod(global_env, global_obj, java_fun, i); 

} 

請檢查該link

+0

當我打電話test2(),我嘗試打印x內容我得到的結果它的工作,但行後,當我試圖保存這個內容其崩潰 – 2014-09-06 23:05:34

+0

順便說一句,所有這一切的目標是從JNI傳遞文本緩衝區到JAVA端並打印它與opengles-文本打印機庫的類型我發現在谷歌它似乎對我來說更短的方式從使用C庫做同樣的事情 – 2014-09-06 23:19:04