JNI Windows Netbeans不满意链接错误

时间:2016-08-01 12:54:31

标签: java netbeans javafx java-native-interface

我正在遵循本指南" How to Create a JNI with NetBeans":

使用此SO question中的代码:

我已经生成了.dll和包文件但不确定我对它们做了什么;如何告诉java使用NetBeans在哪里找到它们?

我的java代码:

package addingcontrollerstogui;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class AddingControllersToGUI extends Application {

    public native int intMethod(int i);

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
        Scene scene = new Scene(root);        
        stage.setScene(scene);
        stage.show(); 
        System.loadLibrary("Main");
        System.out.println(new AddingControllersToGUI().intMethod(2));
    }

我的代码:

#include "AddingControllersToGUI.h"
jint JNICALL Java_addingcontrollerstogui_AddingControllersToGUI_intMethod
(JNIEnv * env, jobject object, jint param1) {
return param1 * param1;
}

1 个答案:

答案 0 :(得分:1)

您需要将DLL加载到程序中。在本机方法之前编辑并将以下内容插入到您的Java代码中:

static {
    System.load("YourNetbeansFolder\\YourProject\\dist\\YourNative.dll");
}

static {}将在首次访问AddingControllersToGUI时运行此方法(因此在调用intMethod()之前)。

显然,需要修改该代码中的文件夹以指向DLL的位置。

当您实际构建和分发程序时,您需要弄清楚如何加载此DLL。例如,在Minecraft中,DLL / SO(SO是基于UNIX的操作系统的#34; DLL和#34;)被提取到%APPDATA%/。minecraft /(或类似UNIX的〜/ .minecraft)并从那里装载。

现在,这应该足够......!