我目前正在尝试使用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;
}
我不知道我现在是否可以提供更多信息,但我目前的问题是,为什么我会得到这个例外?因为我认为它有点模糊。