2012-12-10 16 views
17

Questo è il codice JNI.jstring return in JNI program

codice Java:

public class Sample1 { 

    public native String stringMethod(String text); 

    public static void main(String[] args) 
    { 
     System.loadLibrary("Sample1"); 
     Sample1 sample = new Sample1(); 

     String text = sample.stringMethod("world"); 

     System.out.println("stringMethod: " + text);  
    } 
} 

Cpp Metodo per la funzione stringMethod:

JNIEXPORT jstring JNICALL Java_Sample1_stringMethod 
    (JNIEnv *env, jobject obj, jstring string) { 

const char *name = env->GetStringUTFChars(string, NULL);//Java String to C Style string 
char msg[60] = "Hello "; 
jstring result; 

strcat(msg, name); 
env->ReleaseStringUTFChars(string, name); 
puts(msg); 
result = env->NewStringUTF(msg); // C style string to Java String 
return result;  
} 

Quando si esegue il mio codice Java. Ho ottenuto il risultato qui sotto.

stringMethod: world 

Ma ho aggiunto la stringa "mondo" con "Ciao". Sto anche tornando qui la stringa aggiunta. Ma perché sto ricevendo solo "mondo" non "Hello World". Davvero mi sono confuso con questo codice. Cosa devo fare per ottenere il risultato con una stringa aggiunta?

+1

Il problema è altrove, la vostra concatenazione è perfettamente valida: http://codepad.org/WWR4LzfV –

risposta

9

questo dovrebbe essere il modo per farlo ....

JNIEXPORT jstring JNICALL Java_Sample1_stringMethod 
    (JNIEnv *env, jobject obj, jstring string) { 

const char *name = (*env).GetStringUTFChars(env,string, NULL); 
char msg[60] = "Hello "; 
jstring result; 

strcat(msg, name); 
(*env).ReleaseStringUTFChars(env,string, name); 
puts(msg);    
result = (*env).NewStringUTF(env,msg); 
return result;   
} 
+1

Beh, l'unica differenza che ho vedere tra il codice e il codice dell'autore è che sta usando la sintassi C++ per JNI e la sintassi C per JNI ... – Gugelhupf

+2

Dovrebbe '(* env) -> NewStringUTF (...)' essere 'env-> NewStringUTF (. ..) '? – nn0p

+3

@ nn0p Quando si usano le funzioni 'env' in c, l'istruzione è' (* env) -> Funzione (env, parametri) '. Comunque in C++, questo si trasforma in: 'env-> Function (parameters)'. – agastalver