我想使用JNI在我的java程序中调用本机c ++库中的函数,但是当我调用它时,函数不能正常工作。我有这样的代码:
Test.java
public class Test {
private static native void Logoff();
private static native void Restart();
private static native void Shutdown();
static {
System.loadLibrary("ShutdownImpl");
}
public static void main(String args[]) {
System.out.println("Write option number: 1-logout 2-restart 3-shutdown");
Scanner s = new Scanner(System.in);
int val = s.nextInt();
switch (val) {
case 1:
Logoff();
break;
case 2:
Restart();
break;
case 3:
Shutdown();
break;
}
s.close();
}
}
ShutdownImpl.c(我的原生lib)
#include<windows.h>
#include "Test.h"
JNIEXPORT void JNICALL Java_Test_Logoff(JNIEnv *env, jobject obj)
{
ExitWindowsEx(EWX_LOGOFF | EWX_FORCE ,0);
}
JNIEXPORT void JNICALL Java_Test_Restart(JNIEnv *env, jobject obj)
{
ExitWindowsEx(EWX_REBOOT | EWX_FORCE,0);
}
JNIEXPORT void JNICALL Java_Test_Shutdown(JNIEnv *env, jobject obj)
{
ExitWindowsEx(EWX_POWEROFF | EWX_FORCE ,0);
}
当我在我的程序功能重新启动或关闭中运行时,它根本不起作用。只有注销才能正常运行。我是JNI的新手,所以我不知道我做错了什么。 请帮忙,谢谢你:)
PS。我的代码基于此tutorial
编辑:-------------------------------
我从教程中复制代码并尝试运行,我遇到了同样的问题。程序应该关闭我的电脑 - 只记录我,所以我认为问题必须在不同的地方而不是代码。
EDIT2:------------------------------
问题解决了(对我来说:P)。我使用JNA来调用本机函数,当我调用GetLastError()
时,我发现我的应用程序没有足够的权限来关闭系统。现在我修复了一切,程序运行正常。当然,一切都因为你的帮助:)感谢所有:)