这是我的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
导出LD_LIBRARY_PATH='/home/user/jniwork/'
java NativePrompt
现在我得到下面的错误。我不知道该怎么解决。
线程“main”java中出现异常。lang.unsatifiedLinkError:在java中没有NativePrompt。图书馆java的路径。lang.ClassLoader。java上的loadLibrary(ClassLoader.java:1860)。lang.Runtime。java上的loadLibrary0(Runtime.java:845)。lang.System。在NativePrompt上加载库(System.java:1084)。(NativePrompt.java:5)
尝试像这样启动您的应用程序:
java -Djava.library.path=/home/user/jniwork/ NativePrompt
在此之前,请从NativePrompt重命名库。libNativePrompt也是如此。所以
希望这能帮到你。
JNI++项目提供了两个代码生成实用程序和一个旨在简化用 C++ 进行JNDI 编程的核心C++ 库。使用仅具有相对简单的数据结构的本机C/C++ 类来编写简单的JNI 程序,即这些程序仅访问字段和使用简单的访问方法(accessor)和修改方法(modifier method),这是相当容易的。JNI++ 生成许多从Java 语言访问C++ 类(或C++到Java)所必需的大量代码。
03-21 20:46:07.059 161 82-16182/ch.geniali.test:任务w/dalvikvm?JNI警告:不能在LJava/Lang/Class的实例上调用lch/geniali/test/service/service;.sendmessage;(CallVoidMethod) 03-21 20:46:07.059 161 82-16182/ch.geniali.te
我试图在java和c之间创建一个JNI应用程序,而include #include告诉我找不到jni.h。我已经查看了半打线程和网页,并尝试修复没有工作。如果有帮助的话,我在路径Library/Framework/javavm . Framework中没有任何东西,我不知道如何获得它。 我正在尝试构建一个 JNI 项目。我知道jni.h在路径/库/Java/Java虚拟机器/jdk1.7.0_51
问题内容: 我简单的命令行应用程序: 给我: 永远不会到达“返回0”处的断点。jvm.dll与我的命令行应用程序位于同一目录中。 我不明白这是怎么回事。有任何想法吗?提前感谢 问题答案: 我觉得你的问题是回答这个问题在阳光下JNI常见问题解答。 TL; DR版本:不要移动JVM安装的DLL。
LevelDB JNI 提供了 Google 高效的Key/Value数据库 LevelDB 的 Java 接口。 示例代码: import org.fusesource.leveldbjni.*;import static org.fusesource.leveldbjni.DB.*;import java.io.*;Options options = new Options();options
问题内容: 我想创建一个简单的JNI层。我使用Visual Studio 2008创建了一个dll(带有DLL作为选项的Win 32 Console Application项目类型)。我在调用本地方法时收到此异常: 生成的头文件是: 实现文件是: Java文件是: 当我调用本地方法“ Hello”时,我得到执行。 我观察到的另一件事是,当我使用以下命令在命令行中进行编译时:“ cl -I” C:\