jni调用的本机库中的函数在java中不起作用

时间:2013-09-11 08:41:47

标签: java c++ windows java-native-interface

我想使用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()时,我发现我的应用程序没有足够的权限来关闭系统。现在我修复了一切,程序运行正常。当然,一切都因为你的帮助:)感谢所有:)

0 个答案:

没有答案