2023-01-20 353
我真的很想弄清楚如何使用JNI从Objective-C调用Java函数.
我应该开始说我对Java一无所知,但对OBJ-C非常熟悉.我有一个带有单个方法的Java类,我需要从应用程序捆绑包中调用. jar在捆绑包中的资源文件夹内部,我将NSJavaRoot设置为Content/Resources,NSJavaNeeded被检查,NSJavaPath包含2个jar文件的名称(主一个和一个依赖关系).
我正在使用对JNI_CreateJavaVM的调用来启动VM,然后尝试使用NSClassFromString找到类,这感觉是错误的,但这是我在搜索中找到的唯一方法.我相信,使用弃用的Java桥时,此方法是正确的,但是我找不到使用JNI的任何示例或参考.
我的Java类看起来像这样:
package foo;
public class bar {
public function dostuff() {
}
}
我需要一次致电dostuff()作为应用程序流程的一部分.有人有什么想法吗?
谢谢,
J
由于javabridge已弃用,您将不得不使用JNI进行所有操作.在MacOS上,您需要将Javavm.Framework添加到您的项目中,从您的源文件中,您要寻找的标题为:
#import <JavaVM/jni.h>
接下来,您需要设置Javavm.这可能是不平凡的,具体取决于您的类路径和其他要求,但是您处于正确的轨道,因为这是您用于创建JVM的功能:
JNI_CreateJavaVM(JavaVM **pJVM, void **pJNIEnv, void *args);
接下来,您需要获取对foo.bar类的引用.您可以使用从JNI_Createjavm散发出来的PJNienv进行此操作.您需要致电:
jclass myClass = JNIEnv->FindClass(JNIEnv, "foo/bar"); // Note the slashes replacing the dots...
假设一切都正确设置,您将获得对课程的参考.假设foo.bar具有一个默认参数构造函数,您可以得到一个实例,例如:
jobject myFooBar = JNIEnv->NewObject(JNIEnv, myClass);
现在您需要获取Dostuff方法的方法.为此,您需要它的方法签名,您可以通过调用Javap来获得它:
% javap -s foo.bar
应该产生这样的输出:
Compiled from "bar.java"
public class foo.bar extends java.lang.Object{
public foo.bar();
Signature: ()V
public void doStuff();
Signature: ()V
}
然后,您可以使用它来获取方法ID,您需要调用它.喜欢:
jmethodID mid = JNIEnv->GetMethodID(JNIEnv, myClass, "doStuff", "()V");
假设所有这些事情都正确,那么您可以调用这样的方法:
JNIEnv->CallVoidMethod(JNIEnv, myFooBar, mid);
应该调用该方法.在这些阶段中的任何一个阶段之后,您可能想与VM联系以查看是否有例外.您可以检查是否发生例外:
if (JNIEnv->ExceptionCheck(JNIEnv))
{
// Handle the exception...
}
如果您想要实际的投掷,则可以使用异常jni方法获得它.
因此,它最受欢迎的是:如何使用JNI从可可(Cocoa)调用Java方法.您将需要阅读JNI文档,尤其是有关了解全球和本地参考之间差异的部分. (即,使您的可可侧参考可以持续到足够长的时间,以至于在创建它们的范围之外都被称为.)实际上,有一章关于常见错误和陷阱,其中许多您会击中.
>
>
祝你好运!
以上所述是小编给大家介绍的使用JNI从可可拨打Java类功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25926.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态