2013-03-21 10 views
1

이것은 내 Java 코드입니다.Jni가 작동하지 않습니다.

class NativePrompt { 
    private native String getInput(String prompt); //native method 
    static //static initializer code 
    { 
     System.loadLibrary("NativePrompt"); 
    } 

    public static void main(String[] args) 
    { 
     NativePrompt NP = new NativePrompt(); 
     String sName = NP.getInput("Enter your name: "); 
     System.out.println("Hello " + sName); 
    } 
} 

저는 jdk1.7.0_17을 사용하고 있습니다. 이것은 내가 아래의 주석을 사용하여이 프로그램을 실행 코드

#include "NativePrompt.h" 
#include "jni.h" 
#include "string" 
#include "iostream" 
#include "vector" 

using namespace std; 
/* 
* Class:  NativePrompt 
* Method: getInput 
* Signature: (Ljava/lang/String;)Ljava/lang/String; 
*/ 
JNIEXPORT jstring JNICALL Java_NativePrompt_getInput 
    (JNIEnv *env, jobject obj, jstring prompt){ 

    string sEntry; 
    const char *str; 
    str = env->GetStringUTFChars(prompt, NULL); 
    if (str == NULL) { 
     return env->NewStringUTF(""); 
    } 
    else{ 
    cout << str; 
     //Frees native string resources 
     env->ReleaseStringUTFChars(prompt, str); 

     //reads n-consecutive words from the 
     //keyboard and store them in string 
     getline(cin, sEntry); 

     return env->NewStringUTF(sEntry.c_str()); 
    } 
} 

++ 내 C입니다.

javac NativePrompt.java

javah NativePrompt

g++ -o NativePrompt.so -shared -I /usr/lib/jvm/jdk1.7.0_17/include -I /usr/lib/jvm/jdk1.7.0_17/include/linux NativePrompt.cpp

export LD_LIBRARY_PATH='/home/user/jniwork/'

java NativePrompt

이제 아래 오류가 표시됩니다. 나는 그것을 해결하는 방법을 모른다. 이 같은 응용 프로그램을 실행

Exception in thread "main" java.lang.UnsatisfiedLinkError: no NativePrompt in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860) at java.lang.Runtime.loadLibrary0(Runtime.java:845) at java.lang.System.loadLibrary(System.java:1084) at NativePrompt.(NativePrompt.java:5)

+0

dafault 패키지의 사용으로 인한 문제 일 수 있습니다. 어떤 패키지에서'NativePrompt'를 옮기려고합니까? – CAMOBAP

답변

1

시도 :

java -Djava.library.path=/home/user/jniwork/ NativePrompt 

도 전에,이 당신을 도와줍니다

희망 libNativePrompt.so에 NativePrompt.so에서 라이브러리 이름을 바꿉니다.

+0

감사합니다 :) 잘 작동합니다. –

+0

@SmithDwayne, 기꺼이 도와 드리겠습니다. 건배 – Naytzyrhc