小编Kep*_*ler的帖子

JNI修改Java的静态字段

我正在尝试修改Java的静态字段,但遇到了一个奇怪的问题。如果我不在C中放置一些冗余代码,则Java项目将引发异常。

我正在使用C代码生成.dll

这是我的Java代码

public class Main {

    public static void main(String[] args) {
        Main instance = new Main();
        System.out.println("before change static field:" + staticString);
        instance.CModifyStaticField();
        System.out.println("after change static field:" + staticString);

    }
    private static String staticString = "static";

    private native  String letCModifyStaticField();

    private void CModifyStaticField() {
        letCModifyStaticField();
    }
    static {
        System.loadLibrary("JNI");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的C代码

JNIEXPORT jstring JNICALL Java_Main_letCChangeStaticField
(JNIEnv *env, jobject jobj){
    jclass jclz = (*env)->GetObjectClass(env, jobj);

    //this is the point
    printf("jclz != NULL\n");

    jfieldID jfieldId = (*env)->GetStaticFieldID(env, jclz, "staticString", …
Run Code Online (Sandbox Code Playgroud)

c java java-native-interface

2
推荐指数
1
解决办法
59
查看次数

标签 统计

c ×1

java ×1

java-native-interface ×1