java - 如何在 JNI 中创建具有新作用域的新 Java 对象

标签 java c class scope java-native-interface

我试过下面的例子。我有两个 native 方法 setMessage 和 printMessage。我在 main 方法中创建了两个 ClassA 对象,并在 a1 对象上创建了 setMessage 我也会在 a2 对象上获得相同的消息范围(参见输出)。

如何使用新范围创建新的 ClassA 对象。

A类.c

#include "ClassA.h"

char * message ;
JNIEXPORT void JNICALL Java_ClassA_setMessage (JNIEnv * env , jobject obj, jstring msg){
    message = (*env)->GetStringUTFChars(env, msg, 0);  
}

JNIEXPORT void JNICALL Java_ClassA_printMessage  (JNIEnv * env, jobject obj){
  printf("%s\n", message);
}

A类.java

public class ClassA { 
    static {
         System.loadLibrary("myapp");          
    }
    public native void setMessage(String msg);
    public native void printMessage();
}

类B.java

public class ClassB   { 
    public static void main(String[] args) {
        ClassA a1 = new ClassA();
        System.out.print("Print message with out setMessage() By a1 :");
        a1.printMessage();
        a1.setMessage("I am a1"); 
        System.out.print("Print message after setMessage() By a1 : ");
        a1.printMessage();


        ClassA a2 = new ClassA(); 
        System.out.print("Print message with out setMessage() By a2 :");
        a2.printMessage(); 


    a2.setMessage("I am a2");   
    System.out.print("Print message after setMessage() By a2  :  ");
    a2.printMessage();
    }
}

::::输出::::

  Print message with out setMessage() By a1 : (null)
  Print message after setMessage() By a1    :  I am a1
  Print message with out setMessage() By a2 :  I am a1
  Print message after setMessage() By a2    :  I am a2

最佳答案

在创建新对象之前清除“消息”。

关于java - 如何在 JNI 中创建具有新作用域的新 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41694993/

相关文章:

c - 二维数组指针语法 - C

c - 如何在 C 中创建高级计数器?

java - 在java中的3个类中调用另一个类中的方法

java - MimeMessage 更改现有邮件上的 sendData

java - 替换 JSON 字符串响应中的图像源

java - 如何在 MobileApplication 和 Application 中获得相似的 CSS 外观?

c - 为什么 GCC 不优化掉函数序言和结尾 (push ebp; mov ebp, esp; ...; pop ebp)

javascript - Mouseenter/Mouseleave 区域

javascript - 如何将对象传播到 JavaScript 中的类属性中

java - onNavigationItemSelected() 问题