是否可以使用JNI访问包成员?

时间:2013-09-25 23:47:12

标签: java java-native-interface

我在使用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文件? (我不保留代码,所以这将是最后的手段)

3 个答案:

答案 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只允许您访问类成员和方法,绝大多数不是本地方法变量。