Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jni调用的本机库中的函数在java中不起作用 我想用JNI调用java程序中的C++原生库函数,但是当调用它时,函数就不能正常工作了。我有这样的代码:_Java_C++_Windows_Java Native Interface - Fatal编程技术网

jni调用的本机库中的函数在java中不起作用 我想用JNI调用java程序中的C++原生库函数,但是当调用它时,函数就不能正常工作了。我有这样的代码:

jni调用的本机库中的函数在java中不起作用 我想用JNI调用java程序中的C++原生库函数,但是当调用它时,函数就不能正常工作了。我有这样的代码:,java,c++,windows,java-native-interface,Java,C++,Windows,Java Native Interface,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

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();
    }
}
shutdownpimpl.c(我的本机库)

#包括
#包括“Test.h”
JNIEXPORT void JNICALL Java_测试_注销(JNIEnv*env,jobject obj)
{
ExitWindowsEx(EWX|U下线| EWX|U力,0);
}
JNIEXPORT void JNICALL Java_Test_Restart(JNIEnv*env,jobject obj)
{
ExitWindowsEx(EWX_重启| EWX_力,0);
}
JNIEXPORT void JNICALL Java_测试_关闭(JNIEnv*env,jobject obj)
{
ExitWindowsEx(EWX_断电| EWX_力,0);
}
当我运行我的程序函数重启或关机时,它根本不工作。只有注销工作正常。我是JNI的新手,所以我不知道我做错了什么。 请帮忙,谢谢你:)

我的代码就是基于这个

编辑:-------------------------------

我从教程中复制代码并尝试运行,我也遇到了同样的问题。程序应该关闭我的电脑-只让我注销,所以我认为问题一定是在不同的地方比代码

编辑2:------------------------------


问题解决了(对我来说:p)。我使用JNA调用本机函数,当我调用
GetLastError()
时,我发现我的应用程序没有足够的权限关闭系统。现在我修复了一切,程序运行正常。当然是因为你的帮助:谢谢大家:

你的代码是直接从C++代码>主< /代码>中工作的吗?可能您的用户没有重新启动或关闭计算机的权限。您所说的“完全不工作”是什么意思。JNI函数未调用或异常?性不是你所期望的吗?检查返回值和最后一个错误如何。这将是有价值的信息来帮助你。在C++程序中所有的函数都能正常工作。在Java中调用函数(我在将消息打印到控制台时对此进行了检查),但ExitWindowsEx返回false。调用
GetLastError()
查看失败的原因。在教程中的代码中
GetLastError()
返回
0
,但程序仍然没有做他应该做的事情。他只是让我注销而不是关闭系统。有人能在他的计算机上编译这个代码并检查它是否工作吗?
#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);
}