我需要从Java代码访问Mac上的Wifi设备列表,在研究了它之后,我发现我需要求助于“本地”代码--即CoreWLAN框架和CWInterface.h类(content/CWInterface.html)
我最初以为我可以使用JNA调用这段代码,但是我意识到我需要一些东西,因为CoreWLAN是Objective(不是C/C++)。
我尝试过这个目标--can (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运行很快,但结果是一个只包含CoreWlan.h映射的jar从Java调用CWInterface.h方法的最佳方法是什么?
发布于 2013-06-27 10:31:18
我要做的是创建一个C++类,通过JNI与Java代码进行通信。您可以在您的C++项目中使用xCode和Obj。我还没有尝试在JNI中使用Obj++类,但是我只创建一个C++类,负责Java和Obj之间的所有通信,这个类可以包含在需要它的Obj类中(将这个Obj文件的扩展名更改为.mm,因为它将包括C++代码)。
我发现这是一篇关于JNI:http://www.ibm.com/developerworks/java/tutorials/j-jni/的有用的文章。
发布于 2014-02-22 12:34:43
就我个人而言,我会通过两个完全独立的程序来实现这一点,这些程序通过共享内存映射文件进行通信。一个程序是用直目标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中与目标C运行时进行互操作,可以使用JavaNativeFoundation.framework进行链接,这是JavaVM.framework的一个子框架。它包含object类和宏,用于自动设置和拆卸自动释放池,捕获和重新抛出Java和Cocoa异常,在Foundation容器类中保存JNI全局引用,并转换字符串、数字、列表、映射和集合的对象图。
以上引文是从这里摘录的:
发布于 2014-02-23 01:31:18
为此,您可以使用java objective桥。您只需要加载要与jna的Native.loadLibrary()方法一起使用的框架。
本例使用WebKit框架。https://github.com/shannah/Java-Objective-C-Bridge/blob/master/java/test/ca/weblite/objc/TestWebView.java
https://stackoverflow.com/questions/17339064
复制相似问题