IntelliJ Idea+javafx+第三方库+dll 打包为jar

自己做的opencv for java 的javafx应用,在网上找了打包相关真是太费劲了。。记录一下以供自己之后用
首先打包相关配置:
IntelliJ Idea+javafx+第三方库+dll 打包为jar_第1张图片
IntelliJ Idea+javafx+第三方库+dll 打包为jar_第2张图片
IntelliJ Idea+javafx+第三方库+dll 打包为jar_第3张图片
IntelliJ Idea+javafx+第三方库+dll 打包为jar_第4张图片
现在打包相关配置已经完成了。
在编译器中运行时,我们可以在在Run/Debug Configurations中 VM options写入:
-Djava.library.path={dll文件位置}
同时在代码中写入
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
来调用dll文件。
但是在jar包运行的时候,会提示找不到dll,我们需要把jar包中的dll解压到一个缓存中,然后load,就要修改代码为下:


    static {
        try {

            // getClass().getClassLoader().getResourceAsStream(arg0);
            // System.out.println("MainTest.class.getClass()"+MainTest.class.getClass().toString());
            InputStream in = Main.class
                    .getResourceAsStream("/resource/opencv_java410.dll");   //dll文件位置

            System.out.println("Main.class.getClass()" + in);

            File ffile = new File("");
            String filePath = null;
            filePath = ffile.getAbsolutePath() + File.separator
                    + "opencv_java410.dll";
            System.out.println("filePath opencv_java410.dll is " + filePath);
            File dll = new File(filePath);
            FileOutputStream out = new FileOutputStream(dll);   //缓存dll位置

            int i;
            byte[] buf = new byte[1024];
            try {
                while ((i = in.read(buf)) != -1) {
                    out.write(buf, 0, i);
                }
            } finally {
                in.close();
                out.close();
            }
            System.load(dll.getAbsolutePath());//
            dll.deleteOnExit();

        } catch (Exception e) {
            System.err.println("load jni error!");
        }
    }

另外,一定要注意在加载FXML文件时要用fxmlLoader.setLocation(getClass().getResource("/yixianyong/view/RootLayout.fxml"));或者类似的
而不是fxmlLoader.setLocation(getClass().getResource("…/view/RootLayout.fxml"));或者类似的
否则会出现错误:
IntelliJ Idea+javafx+第三方库+dll 打包为jar_第5张图片
最后打包:
IntelliJ Idea+javafx+第三方库+dll 打包为jar_第6张图片
IntelliJ Idea+javafx+第三方库+dll 打包为jar_第7张图片
build 或者rebuild都可以。

你可能感兴趣的:(配置)