求指教,C++编写JNI中jobect和jstring如何类型转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求指教,C++编写JNI中jobect和jstring如何类型转换相关的知识,希望对你有一定的参考价值。
RT最近接触JNI利用反射取得传入的ArrayList的get方法,但get方法取出结果为object型(本地方法中为_object*吗)如何转换为字符串类型jstring
参考技术A msg = (jbyteArray)(*env)->CallObjectMethod(env,job, mid); if(msg !=0) int counter; int len =(*env)->GetArrayLength(env,msg); jbyte* elems =(*env)-> GetByteArrayElements(env,msg, 0); //for ( counter= 0; counter < len; counter += 3) //jbyte value = (jbyte)(elems[counter] * 0.299 + elems[counter + 2] * 0.114 + elems[counter + 1] * 0.587); //elems[counter] = value; //elems[counter + 1] = value; //elems[counter + 2] = value;Java JNI - 调用对象方法
【中文标题】Java JNI - 调用对象方法【英文标题】:Java JNI - Calling object method 【发布时间】:2010-01-30 19:06:42 【问题描述】:我目前正在使用 JNI 编写一些 C++ 代码和 Java 之间的接口。
我在我的 GUI 中收到了一些想要传递给 C++ 事件处理程序的事件。
因此我调用了一个我用 Java 编写的函数。
public void sendToEventQueue( AWTEvent evt )
Mudkiptz.Main.fctC_sendEvent( evt );
此方法位于抽象类 EventHdl 中,我将其用作 keyEventHandler 的超类,在其中我重载了 keyTyped(KeyEvent) 以使用先前声明的方法将 KeyEvent 发送到我的 C++ 事件处理程序。
我的问题是我想从我传递的 KeyEvent 中获取我的 keyEvent keyCode。
JNIEXPORT void JNICALL Java_Mudkiptz_Main_fctC_1sendEvent
(JNIEnv* env, jclass, jobject evt)
// Obtenir les infos (Get information)
jclass keyEventClass = env->FindClass("java/awt/event/KeyEvent");
if( env->IsInstanceOf(evt, keyEventClass) )
jmethodID getKeyCode = env->GetMethodID(keyEventClass, "getKeyCode", "()I");
int keyCode = 0;
keyCode = env->CallIntMethod(evt, getKeyCode);
// getInstance()
Application::obtenirInstance()->getEventQueue()->push( evt );
但它不起作用...... :(我不习惯 JNI,所以这可能是一个简单的错误,但我非常感谢帮助。
编辑:我应该更准确。方法返回但 keyCode 在它应该给出 keyCode 时总是等于 0。谢谢!
谢谢!
【问题讨论】:
你能详细说明“不起作用”吗?发生什么了?你期望发生什么? 方法签名看起来很有趣。我脑子里没有 JNI 签名规则,但Java_Mudkiptz_Main_fctC_1sendEvent
看起来不对。为什么函数名中间有个“1”?
对不起,事实上,发生的情况是该方法被调用但当它应该返回正确的KeyCode时总是返回0。对于 JNI 签名,我不理解声明中的 1,但我的界面中的所有其他 JNI 方法都在工作,所以我略过它。谢谢!
【参考方案1】:
我终于发现我做错了什么。似乎 getKeyCode 不是我正在寻找的功能。
为了调试,我去了 java 调用并将事件打印到字符串和 keycode 即使在 java 中也总是等于 0。因此,我检查了转储,并且 keyChar 具有我输入的正确值。所以我改用 getKeyChar 调用,一切正常。
感谢您的帮助!
【讨论】:
以上是关于求指教,C++编写JNI中jobect和jstring如何类型转换的主要内容,如果未能解决你的问题,请参考以下文章
C++编程题,求大神指教,实在是小白不会。已知速度和时间和加速度。框架也有了,但是真的不太会
如何编写代码以使用 microsoft visual c++ 调用 JNI [关闭]