java - 从 Java 调用 Objective-C 代码的最简单方法是什么?

标签 java objective-c macos jnaerator corewlan

我需要从 Java 代码访问 Mac OSX 上的 Wifi 设备列表,在研究它之后,我发现我需要求助于“ native ”代码——即 CoreWLAN 框架和 CWInterface.h 类(https://developer.apple.com/library/mac/#documentation/CoreWLAN/Reference/CWInterface_reference/translated_content/CWInterface.html )

我最初以为我可以使用 JNA 调用此代码,但意识到我需要一些东西,因为 CoreWLAN 是 Objective-C(而不是 C/C++)。

我试过这个 Objective-C Java 桥 (https://github.com/shannah/Java-Objective-C-Bridge),但我不知道如何让它找到 CoreWLAN 框架。

所以我也尝试使用 JNAerator ( https://code.google.com/p/jnaerator/wiki/ObjectiveC ) 所以我可以使用 BridJ ( https://code.google.com/p/bridj/ ),但我不能让它生成正确的 Java 代码。

  • 仅使用此样式 java -Xmx1000m -jar jnaerator.jar -framework CoreWLAN -jar CoreWlan.jar 运行速度很快,但生成的 jar 仅包含 CoreWlan.h 的映射
  • 如果我针对 CWInterface.h 运行 jnaerator,则 jnaerator 会失败。 (我使用的是最新的 jnaerator 快照版本)

从 Java 调用 CWInterface.h 上的方法的最佳方法是什么?

最佳答案

我要做的是创建一个通过 JNI 与 Java 代码通信的 C++ 类。您可以在 xCode 项目中同时使用 C++ 和 Obj-C。我还没有尝试过将 Obj-C++ 类与 JNI 一起使用,但我只是创建一个 C++ 类来负责 Java 和 Obj-C 之间的所有通信,这个类可以只包含在你需要的 Obj-C 类中它(将此 Obj-C 文件的扩展名更改为 .mm,因为它将包含 C++ 代码)。

我发现这是一篇关于 JNI 的有用文章:http://www.ibm.com/developerworks/java/tutorials/j-jni/

关于java - 从 Java 调用 Objective-C 代码的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17339064/

相关文章:

java - 部署在 mochahost 共享服务器上时出现 NullPointerException 获取连接

java - 从文件中读取多个 JSONObject

objective-c - 删除 NSArray 中所有重复的字符串

objective-c - 我们能知道Xode项目中NSBundle的内容吗?

objective-c - FSEvents-检测文件夹上的事件类型

java - 查找Java中操作消耗的内存

java - 对链表中的值进行排序

ios - 如何在 iOS 中生成 32 位 UUID?

python-3.x - Spyder 未启动,出现 TypeError : __init__() missing 1 required positional argument

php - 如何在 Mac OS X 10.5 Leopard 上设置 PEAR