当前位置: 首页 > 知识库问答 >
问题:

Jni不工作

丌官皓君
2023-03-14

这是我的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)

共有1个答案

鞠自明
2023-03-14

尝试像这样启动您的应用程序:

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:\