Java应用程序和C++应用程序之间的通信

4
我正在尝试为Java应用程序编写插件。该插件应能告诉Java应用程序已识别出新事件(观察者设计模式,轮询...这不是重点)。问题在于,这些事件是来自Microsoft Kinect控制器的跟踪手势(我使用C++和Microsoft Kinect SDK,因为必须如此)。这意味着我必须在Java应用程序和我的Kinect应用程序之间进行通信。我考虑了一些解决方案,例如适配器设计模式,其中Java应用程序“包含”接口(C++头文件、DLL等)。一开始我想到了JNI,但那样我必须编写一个将用于两个应用程序的DLL,对吗?另一件事我想到的是通过UDP等协议提供手势数据(或更轻量级的东西)。最后我听说了编写COM+程序集的方法……但说实话,我对COM+的了解很少。
JAVA APPLICATION << ----- ??? ----- >> KINECT APPLICATION
3个回答

5

你可以看一下谷歌的Protocol Buffers

如果你考虑使用JNI,我建议你参考这个IBM教程

JNI 允许 Java 应用程序调用 C/C++ 方法,反之亦然。

如果你正在从C++调用Java,还可以查看这个问题


3

我找到了一些例子,比如这里这里这里,它们建议你使用共享内存结构或使用套接字。

我认为,在这种情况下,让您的程序通过套接字进行通信是最好的选择,因为您的应用程序不会那么紧密地耦合在一起,所以您只需要公开一个IP、一个端口和一组命令即可。

根据这个,似乎可以在Kinect上创建一个C++服务器,但除此之外,我对Kinect相关项目没有更多了解。


哦,当然……套接字!我会仔细研究一下的。谢谢! - seveves
运行得非常好!我决定使用UDP...看起来不错;)...谢谢! - seveves
@SeveFriede:请记住,尽管UDP更快,但它不能保证包裹的传递。如果您决定让应用程序在较大的距离上通信,这可能会成为问题 ;) - npinti
谢谢提示!但目前整个程序都在本地机器上运行 ;) - seveves

0

JNI(Java Native Interface)允许Java应用程序调用C/C++方法。

所有这些都需要我们有一种通信方式(将Java与C++集成),这是由JNI(Java Native Interface)提供的。

关于使用JNI并从Java调用本地方法的实际示例,请参见this InfoWorld article


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接