JNI調用java方法


調用java靜態方法

jclass led = env->GetObjectClass(jclassled);

//  獲取id
jmethodID getLedId = env->GetStaticMethodID(led, "getLedId", "()I");
LOGE("#######getLedId \n");
if (getLedId == NULL)
{
    LOGE("#######error getLedId\n");
    return -1; /* method not found */
}
jint id = env->CallIntMethod(led, getLedId);
 LOGE("#######CallIntMethod \n");
//  獲取color
jmethodID getColor = env->GetStaticMethodID(led, "getColor", "()[I");
if (getColor == NULL) 
{
    LOGE("#######error getColor\n");
    return -1; /* method not found */
}
jint color[3] = {0}; 
jobjectArray resultArray = (jobjectArray) env->CallObjectMethod(led, getColor);
for (int i = 0; i < env->GetArrayLength(resultArray); i++) 
{
    color[i] = (jint) env->GetObjectArrayElement(resultArray, i);
}

LOGE("#######id = %d, r=%d, g=%d, b=%d\n", id, color[0], color[1], color[2]);
//  設置led
set_led(id, color[0], color[1], color[2]);

調用java實例方法

jclass led = env->FindClass("com/deptech/common/base/utils/commonUtils/Led");
if (led == NULL)
{
    LOGE("#######not found class.\n");
    return -1;
}

// 構造方法
jmethodID mid_construct = env->GetMethodID(led, "<init>","()V");
if (mid_construct == NULL) 
{
    LOGE("#######not found construct func.\n");
    return -1;
}

// 獲取getLedId方法
jmethodID getLedId = env->GetMethodID(led, "getLedId", "()I");
if (getLedId == NULL)
{    
    LOGE("#######not found getLedId func.\n");
    return -1;
}

jmethodID getColorR = env->GetMethodID(led, "getColorR", "()I");
if (getColorR == NULL)
{
    LOGE("#######not found getColorR func.\n");
    return -1;
}
jmethodID getColorG = env->GetMethodID(led, "getColorG", "()I");
if (getColorG == NULL)
{
    LOGE("#######not found getColorG func.\n");
    return -1;
}
jmethodID getColorB = env->GetMethodID(led, "getColorB", "()I");
if (getColorB == NULL)
{
    LOGE("#######not found getColorB func.\n");
    return -1;
}

//  使用構造方法實例化
jobject ledObj = env->NewObject(led, mid_construct);
if (ledObj == NULL) {
    LOGE("#######error NewObject.\n");
    return -1;
}

// 調用實例方法
// 獲取id
jint id = env->CallIntMethod(ledObj, getLedId);
LOGE("#######CallIntMethod %d.\n", id);

//  獲取color
jint r, g, b;
r = env->CallIntMethod(ledObj, getColorR);
g = env->CallIntMethod(ledObj, getColorG);
b = env->CallIntMethod(ledObj, getColorB);


jobjectArray resultArray = (jobjectArray) env->CallObjectMethod(ledObj, getColor);
if (resultArray == NULL)
{
    LOGE("#######error resultArray is null.\n");
    return -1;
}
for (int i = 0; i < env->GetArrayLength(resultArray); i++) 
{
    color[i] = (long)env->GetObjectArrayElement(resultArray, i);
}

LOGE("#######CallObjectMethod.\n");

//  設置led
LOGE("#######id = %d, r=%d, g=%d, b=%d\n", id, r, g, b);
set_led(id, r, g, b);

// 釋放
env->DeleteLocalRef(led);
env->DeleteLocalRef(ledObj);
//env->DeleteLocalRef(resultArray);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM