我在使用JNI从我的导入中获取对象时遇到问题。可能吗?例如,假设我在我的java文件中有这个:
import foo.Bar;
public class MyClass {
public MyClass(){
Bar.runMethod();
}
}
我可以在不更改Java代码的情况下使用JNI引用“Bar”吗?我只能创建一个新的“Bar”对象,这不是我想做的。
编辑:为了扩展这一点,runMethod()执行如下操作:
public class Bar{
public static void runMethod(){
Bar inst = new Bar();
...more code...
}
}
所以现在有一个Bar浮动的实例,我不知道如何使用JNI进行访问。如果bar有togglebuttons,单选按钮等等,我不能使用JNI来操作它们,因为我无法获得引用它的jobject。有什么我可以做的,还是我不得不求助于编辑Java文件? (我不保留代码,所以这将是最后的手段)
答案 0 :(得分:0)
您的问题不清楚,或者您的标题,但您当然可以将Bar实例传递给本机方法或Bar.class,或者从其中找到Bar.class。
答案 1 :(得分:0)
JNI可以访问任何对象的任何方法,包括Java类的私有方法。然而,这个问题并未提供足够的具体细节,以便我们能够很好地理解上下文以帮助您。
Oracle引用有点迟钝,但是如果你提供JNI方面的代码示例,我们可能会为你揭开它的神秘面纱:http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html#wp15982
答案 2 :(得分:0)
public class Bar{
public static void runMethod(){
Bar inst = new Bar();
...more code...
}
当函数完成时,方法“runMethod”中的名为inst的实例不再存在,除非它在“更多代码”部分中存储在静态类变量下,因此不存在实例你可以参考。
JNI只允许您访问类成员和方法,绝大多数不是本地方法变量。