调用java静态方法
jclass led = env->GetObjectClass(jclassled);
jmethodID getLedId = env->GetStaticMethodID(led, "getLedId", "()I");
LOGE("#######getLedId \n");
if (getLedId == NULL)
{
LOGE("#######error getLedId\n");
return -1;
}
jint id = env->CallIntMethod(led, getLedId);
LOGE("#######CallIntMethod \n");
jmethodID getColor = env->GetStaticMethodID(led, "getColor", "()[I");
if (getColor == NULL)
{
LOGE("#######error getColor\n");
return -1;
}
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]);
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;
}
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;
}
jint id = env->CallIntMethod(ledObj, getLedId);
LOGE("#######CallIntMethod %d.\n", id);
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");
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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗