Это мой код 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.
Это мой код на С ++
#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.cppexport LD_LIBRARY_PATH = ‘/ home / user / jniwork /’
Java NativePrompt
Теперь я получаю ошибку ниже. Я не знаю, как решить это.
Исключение в потоке «main» java.lang.UnsatisfiedLinkError: нет
NativePrompt в java.library.path в
java.lang.ClassLoader.loadLibrary (ClassLoader.java:1860) в
java.lang.Runtime.loadLibrary0 (Runtime.java:845) в
java.lang.System.loadLibrary (System.java:1084) в
NativePrompt. (NativePrompt.java:5)
попробуйте запустить ваше приложение так:
java -Djava.library.path=/home/user/jniwork/ NativePrompt
а также прежде, переименуйте вашу библиотеку из NativePrompt.so в libNativePrompt.so
Надеюсь, что это помогает вам.
Других решений пока нет …