3

我使用 Opencv 3.1 Java 库制作了 JavaFX 项目。

问题是我的项目从 IDE 运行完全完美,但是当我尝试.jardist文件夹运行文件时,它会引发不满意的链接错误。

我已经搜索过这个问题并找到了很多答案,但没有一个能解决我的问题。我认为这些解决方案可能是针对旧版本的。

我的主要方法如下:-

 public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        launch(args);
    } 

我还正确设置了库路径

在此处输入图像描述

并且在指定位置也有.dll 文件

在此处输入图像描述

如果我从 IDE 运行,该应用程序将完全按预期运行!

PS:我也尝试将项目放在 Eclipse 中并尝试创建 jar,但同样的事情发生了,它在 IDE 中运行,但在我运行 jar 时没有

错误详情 :

java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
        at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at com.Rein.rteapp.MainApp.main(MainApp.java:129)
4

1 回答 1

3

我找到了解决方案。

我通过在需要引用一些外部资源的任何地方使用相对路径来解决它。因此,在您使用 System.getProperty("user.dir")它的任何地方都引用您的应用程序根文件夹。

例如:- 如果您引用了类似的内容:-

String path =  System.getProperty("user.dir") + "\\MyResourceFolder";

然后,您必须将“MyResourceFolder”复制到创建 jar 的文件夹中(在 jar 文件旁边)。

该解决方案在 IDE 中运行,因为我们已将资源文件夹复制到我们的项目根文件夹中,但是当我们创建 jar 文件时,这些资源文件不会被复制到 jar 的文件夹中,因此接下来我们必须手动复制所有这些资源文件夹及其内容到我们运行 jar 时为维护相对路径而创建 Jar 文件的位置。

于 2017-04-20T15:24:15.707 回答