2017-01-17 10 views
3

Я пробовал ниже пример. У меня есть два собственных метода setMessage и printMessage. Я создаю два объекта ClassA в основном методе, а setMessage для объекта a1 также получает ту же область сообщений в объекте a2 (см. Вывод).Как создать новый объект Java с новой областью в JNI

Как создать новый объект ClassA с новой областью.

ClassA.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); 
} 

ClassA.java

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

ClassB.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 

ответ

1

Очистить «сообщение» перед созданием нового объекта.

+0

Но мне нужен новый объект с новой областью. Я хочу использовать два объекта одновременно. –

+0

Затем удалите это статическое 'static { System.loadLibrary (" myapp "); } ' и изменить его как ' Runtime.getRuntime(). LoadLibrary ("myapp"); ' – bala