Eclipse RCP中的java进程自定义设备事件
我有一个Eclipse RCP产品,可以很好地使用键盘和鼠标。我想在我的产品中支持定制硬件。 为了在Eclipse RCP产品中启用该设备,我编写了JNI代码。此JNI代码初始化设备&;驱动程序(工作正常)。调用此JNI方法后,RCP应用程序代码开始接收显示中的事件。readAndDispatch()方法。我不明白的是,如何将这些事件发送到我的widget类。所有SWT小部件都有处理事件的windowProc方法。这些方法只处理预定义的事件,它们是私有(包私有)方法,所以我不能重写它们
<^ >在{{1}页,在本机小部件中,他们解释了在C++代码中向WoDOWPROC方法添加钩子。我试着用以下方法来做:JNIEXPORT jint JNICALL Java_com_aiit_iadss_framework_event_SpaceMouseEventManager_initInternal
(JNIEnv *env, jobject obj, jlong hwnd )
{
fprintf(stderr, "Initializing the space mouse module!");
//code to init the device & driver
if( res > 0 )
{
//the initialization was successful. Setup the 3D mouse event listener
WM_3DMOUSE = RegisterWindowMessage (_T("SpaceWareMessage00"));
//adding hook on RCP application window for WindowProc
oldProc = (WNDPROC) SetWindowLongPtr((HWND) hwnd, GWLP_WNDPROC, (long) WindowProc);
}
return res;
}
LRESULT CALLBACK WindowProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
int num; /* number of button returned */
//SiSpwEvent Event; /* 3DxWare Event */
//SiGetEventData EData; /* 3DxWare Event Data */
if( msg == WM_3DMOUSE )
{
fprintf( stderr, "Space mouse event caught!");
return (TRUE);
}
//call windowproc to handle other events
return CallWindowProc( oldProc, hwnd, msg, wParam, lParam );
}
当我运行上述代码时,JVM会崩溃,出现访问冲突代码。 你能帮我解决这个问题吗
# 1 楼答案
好的,我最终通过在Java代码中添加WindowProc处理程序实现了这一点,如下所示:
windowProc方法的实现方式如下:
这样我就可以在代码中处理自定义事件