如何修改从Java传递给jni的int参数

时间:2018-09-17 09:55:36

标签: java int java-native-interface

我正在将一个名为length的int变量传递给JNI,以修改其值。

但是我没有返回修改后的值。

我的JNI功能:

int change(int length){
 length =6;
 return something
}

当我在函数调用后使用长度值时,它具有默认值本身而不是修改后的值。

为什么我没有得到修改后的值?

1 个答案:

答案 0 :(得分:2)

有两种方法:

1) 第一个是最简单的方法,只需返回长度即可:

int change(int length){
        length = 6;
        return length;
    }

NB Java始终是pass-by-value

2) 第二个比较棘手:

您必须创建一个方法才能 设置 获取 length值。

类似这样的东西:

public class FooBar { //This is you class with the length var
    private int _length;

    public FooBar(){
        _length = 0;
    }

    //Now we are going to create the SET and GET methods

    public GetLength(){
        return _length;
    }
    public SetLength(int length){
        _length = length;
    }
}

现在您的课程看起来与上面的课程相似,我们可以这样做:

int change(int length){
        SetLength(length);
        return something;
    }

如果您是从另一个类调用的,则应记住首先创建该类的对象,如下例所示:

FooBar foo1 = new FooBar();

//things and things here

int change(int length){
        foo1.SetLength(length);
        return something;
    }

如您所见,lenght变量现在为 private ,因此我们需要始终使用:

  • GetLength以便检索其值。

  • SetLength来设置新值。

Java中的每个类都应该像这样工作,这只是使用Java进行编程的良好习惯!