我正在尝试修改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)