2010-10-06 81 views
2

我已經做了一個接受字符串作爲用戶輸入的java程序。現在我已經在Visual C++中編寫了它的代碼。當我從netbeans運行我的程序時,它顯示這個異常。異常JNI(Ljava/lang/String;)Ljava/lang/String;

Exception in thread "main" java.lang.UnsatisfiedLinkError: Prompt.getLine(Ljava/lang/String;)Ljava/lang/String; 
     at Prompt.getLine(Native Method) 
     at Prompt.main(Prompt.java:19) 

這是什麼問題。需要幫忙。由於

這是Java代碼

public class Prompt { 

    /** 
    * @param args the command line arguments 
    */ 
    private native String getLine(String prompt); 
    public static void main(String[] args) { 
     // TODO code application logic here 
     Prompt p = new Prompt(); 
     String input = p.getLine("Type a line:"); 
     System.out.println("User Typed:" + input); 
    } 
    static { 
     System.loadLibrary("Prompt"); 
     //System.load("C:/Program Files/Java/jdk1.6.0/bin/Prompt.dll"); 
    } 
} 

,這是C++代碼

#include "stdafx.h" 
#include "jni.h" 
#include "jni_md.h" 

JNIEXPORT jstring JNICALL Java_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt) 
{ 
    char buf[128]; 
    const char *str; 
    str = env->GetStringUTFChars(prompt,0); 
    if (str == NULL) { 
     return NULL; /* OutOfMemoryError already thrown */ 
    } 
    printf("%s", str); 
    env->ReleaseStringUTFChars(prompt, str); 
    /* We assume here that the user does not type more than 
    * 127 characters */ 
    scanf("%s", buf); 
    return env->NewStringUTF(buf); 
} 
+0

你有沒有加載dll?你可以發佈你的代碼嗎? – 2010-10-06 06:45:34

+0

是的,我已經加載它,當然我會發布它 – 2010-10-06 06:46:33

+0

'System.loadLibrary(「提示」);'是不是應該是DLL的路徑相同的評論之一? – 2010-10-06 06:54:29

回答

1

@ org.life.java ....我得到了這個問題,這是我的錯,我是不包括在C++中爲Prompt.h的JNI風格頭文件java的頭文件,「#include "jni_md.h」這個將被淘汰,並且包含"Prompt.h"現在它工作正常。