使用JNI的UnsatisfiedLinkError

时间:2018-04-06 18:04:25

标签: java java-native-interface unsatisfiedlinkerror

我目前正在尝试使用JNI使用一些本机代码来获取控制台的宽度和高度,但我不断收到此错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: project.console.NativeConsole.getConsoleWidth()I
at project.console.NativeConsole.getConsoleWidth(Native Method)
at project.Core.main(Core.java:14)

我在网上搜索了这个例外是什么以及如何修复它,但没有成功

这是我目前的代码:

Main.java

package project;

import project.console.NativeConsole;

public class Core {

    public static void main(String[] args) {
        NativeConsole console = new NativeConsole();
        console.getConsoleWidth();
    }

}

NativeConsole.java

package project.console;

public class NativeConsole {

    static {
        System.loadLibrary("NativeConsole");
    }

    public native int getConsoleWidth();
    public native int getConsoleHeight();
    public native void clearConsole();

}

dll是用c ++编写的,是.cpp和编译成.dll文件的.h文件

cpp文件:

#include <jni.h>
#include <stdio.h>
#include <windows.h>
#include "project_console_NativeConsole.h"

/*
 * Class:     project_console_NativeConsole
 * Method:    getConsoleWidth
 * Signature: ()I
 */
JNIEXPORT jint JNICALL     Java_project_console_NativeConsole_getConsoleWidth(JNIEnv *env, jobject obj) {
    CONSOLE_SCREEN_BUFFER_INFO inf;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &inf);
    return (jint) inf.dwSize.X;
}

/*
 * Class:     project_console_NativeConsole
 * Method:    getConsoleHeight
 * Signature: ()I
 */
JNIEXPORT jint JNICALL     Java_project_console_NativeConsole_getConsoleHeight(JNIEnv *env, jobject obj) {
    CONSOLE_SCREEN_BUFFER_INFO inf;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &inf);
    return (jint) inf.srWindow.Bottom - inf.srWindow.Top;
}

/*
 * Class:     project_console_NativeConsole
 * Method:    clearConsole
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_project_console_NativeConsole_clearConsole(JNIEnv *env, jobject obj) {
    system("cls");
    return;
}

我不知道我现在是否可以提供更多信息,但我目前的问题是,为什么我会得到这个例外?因为我认为它有点模糊。

0 个答案:

没有答案