Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java调用Objective-C代码最简单的方法是什么?_Java_Objective C_Macos_Jnaerator_Corewlan - Fatal编程技术网

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

从Java调用Objective-C代码最简单的方法是什么?,java,objective-c,macos,jnaerator,corewlan,Java,Objective C,Macos,Jnaerator,Corewlan,我需要从Java代码访问Mac OSX上的Wifi设备列表,研究之后,我发现我需要使用“本机”代码,即CoreWLAN框架和CWInterface.h类() 我最初认为我可以使用JNA调用这段代码,但意识到我需要一些东西,因为CoreWLAN是Objective-C(不是C/C++) 我尝试过这个Objective-CJavaBridge(),但我不知道如何让它找到CoreWLAN框架 所以我也尝试过使用jnavigator(),所以我可以使用BridJ(),但是我不能让它生成正确的Java代码

我需要从Java代码访问Mac OSX上的Wifi设备列表,研究之后,我发现我需要使用“本机”代码,即CoreWLAN框架和CWInterface.h类()

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

我尝试过这个Objective-CJavaBridge(),但我不知道如何让它找到CoreWLAN框架

所以我也尝试过使用jnavigator(),所以我可以使用BridJ(),但是我不能让它生成正确的Java代码

  • 仅使用这种样式
    java-Xmx1000m-jar-jnavigator.jar-framework-CoreWLAN-jar-CoreWLAN.jar
    运行速度很快,但结果是jar只包含CoreWLAN.h的映射
  • 如果我对CWInterface.h运行Jnabagator,那么Jnabagator将失败。 (我正在使用最新的快照版本的jnavior)

<> P> >从java中调用CWult界面的方法是什么?h?/p> < p>我要做的是创建一个C++类,通过JNI与java代码通信。您可以在XCODE项目中同时使用C++和Obj-C。我没有尝试使用JNI使用Obj-C++类,但是我只会创建一个C++类,负责java和Obj-C之间的所有通信,这个类可以只包含在需要的Obj-C类中(将这个Obj-C文件的扩展名改为采购经理,因为它包含C++代码)。
我发现这是一篇关于JNI的有用文章:

就我个人而言,我会通过两个完全独立的程序来实现这一点,它们通过共享内存映射文件进行通信。一个程序用纯Objective-C编写,另一个用纯Java编写

内存映射意味着两个程序都可以访问相同的内存区域,而不必求助于JNI

关于Java内存映射的注意事项:

http://javarevisited.blogspot.co.uk/2012/01/memorymapped-file-and-io-in-java.html
关于目标C的记忆映射的注释:

https://gist.github.com/jverkoey/2985830
也就是说,如果你真的想走JNI路线,那么苹果有以下建议:

建议您使用Xcode中的Java JNI模板作为JNI开发的起点

要从JNI与Objective-C运行时进行互操作,请链接JavaNativeFoundation.framework,其中 是JavaVM.framework的子框架。它包含自动设置的Objective-C类和宏 拆除自动释放池,捕获并重新抛出Java和Cocoa异常,保存JNI全局引用 在基础容器类中,并转换字符串、数字、列表、映射和集合的对象图。

以上引述摘自此处:


您可以使用java objective-c桥来实现这一点。您只需要加载要与jna的Native.loadLibrary()方法一起使用的框架


本例使用WebKit框架

洛可可试着用它