이것은 내 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)
dafault 패키지의 사용으로 인한 문제 일 수 있습니다. 어떤 패키지에서'NativePrompt'를 옮기려고합니까? – CAMOBAP