这是我的Java代码。
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。 这是我的c ++代码
#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());
}
}
我使用以下评论运行此程序。
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
现在我收到以下错误。我不知道如何解决它。
线程“main”中的异常java.lang.UnsatisfiedLinkError:no java.library.path中的NativePrompt 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 :(得分:1)
尝试启动您的应用程序:
java -Djava.library.path=/home/user/jniwork/ NativePrompt
以及之前,将您的库从NativePrompt.so重命名为 libNativePrompt.so
希望这可以帮助你。