JNI异常 (Ljava/lang/String;)Ljava/lang/String;

3

我用Java写了一个小程序,能够接收用户输入的字符串。现在我用Visual C++编写了一个DLL文件。当我从NetBeans运行我的程序时,它显示了以下异常:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Prompt.getLine(Ljava/lang/String;)Ljava/lang/String;
        at Prompt.getLine(Native Method)
        at Prompt.main(Prompt.java:19)

这是什么问题?需要帮助。谢谢。

这是Java代码。

public class Prompt {

    /**
     * @param args the command line arguments
     */
    private native String getLine(String prompt);
    public static void main(String[] args) {
        // TODO code application logic here
        Prompt p = new Prompt();
        String input = p.getLine("Type a line:");
        System.out.println("User Typed:" + input);
    }
    static {
        System.loadLibrary("Prompt");
        //System.load("C:/Program Files/Java/jdk1.6.0/bin/Prompt.dll");
    }
}

这是C++代码

#include "stdafx.h"
#include "jni.h"
#include "jni_md.h"

JNIEXPORT jstring JNICALL Java_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt)
{
    char buf[128];
    const char *str;
    str = env->GetStringUTFChars(prompt,0);
    if (str == NULL) {
        return NULL; /* OutOfMemoryError already thrown */
    }
    printf("%s", str);
    env->ReleaseStringUTFChars(prompt, str);
    /* We assume here that the user does not type more than
    * 127 characters */
    scanf("%s", buf);
    return env->NewStringUTF(buf);
}

我猜你的 DLL 构建肯定出了问题。 - jmj
谢谢您的时间:),我还需要问一件事,我该如何获得与JNI相关的非常好的帮助,比如任何教程或书籍。我已经有6-7年没有碰过C++了,但仍在使用Java。 - JN_newbie
您可以回答此问题并接受回答以使该问题得到回答。 - jmj
这是我认为的标准位置:http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jni.html。 - jmj
有人有最新的Sun(现在是Oracle)在线培训链接吗?遗憾的是,那个链接现在已经失效了 :-( - Ogre Psalm33
显示剩余12条评论
1个回答

1

@org.life.java....我遇到了问题,是我的错误。我没有包含Java的头文件,即JNI样式的头文件,Prompt.h在C++中,“#include "jni_md.h”将被删除并包含"Prompt.h"现在它正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接