导出的(Eclipse)可执行jar文件中的UnsatisfiedLinkError

Viv*_*and 6 java eclipse opencv javafx executable-jar

从Eclipse执行时,代码工作正常.我正在使用OpenCV 2.4.11和JavaFX for UI.当我从Eclipse导出可执行Jar并从cmd运行它时,我得到以下异常:

在此输入图像描述

我跟很多张贴在这里的SO和OpenCV论坛(1,2,3,4),但是,没有一个答案似乎帮助我.

我已经将OpenCV jar添加为库,而Native Library链接到/ build/java/x64,如SO答案中所建议的那样.

Java构建路径

发生在的System.loadLibrary(Core.Native_Library_Name)例外,我查了Native_Library_Name和OpenCV的版本是一样的一个我在我的项目进口.

public class CustomFrame extends Application{

    @Override
    public void start(Stage primaryStage){
        Group root = new Group();
        Canvas canvas = new Canvas(1440, 840);

        ImageView imageView = new ImageView();
        imageView.setFitHeight(canvas.getHeight());
        imageView.setFitWidth(canvas.getWidth());
        new FrameController().startCamera(imageView);

        root.getChildren().addAll(imageView, canvas);
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    public static void main(String[] args)
    {
        // load the native OpenCV library
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有人认为我错过了什么,请告诉我.

Sky*_*ker 7

UnsatisfiedLinkError当应用程序试图加载本地库就像被抛出

  1. .so 在Linux中,
  2. .dll 在Windows或
  3. .dylib 在Mac中

并且该库不存在.

具体来说,为了找到所需的本机库,JVM同时查看PATH environment variablejava.library.path系统属性.

有时,如果应用程序已加载本机库,并且同一应用程序尝试再次加载它,则也可能导致此错误.


如何处理UnsatisfiedLinkError?

首先,我们必须验证System.loadLibrary方法中传递的参数是否正确并且库实际存在.请注意,不需要扩展库.因此,如果您的库已命名SampleLibrary.dll,则必须将SampleLibrary值作为参数传递.

此外,如果您的应用程序已经加载了库,并且应用程序尝试再次加载它,UnsatisfiedLinkError那么JVM将抛出该库.此外,您必须验证应用程序java.library.pathPATH environment library应用程序中是否存在本机库.如果仍无法找到库,请尝试提供System.loadLibrary方法的绝对路径.

要执行应用程序,请使用-Djava.library.path参数显式指定本机库.例如,使用终端(Linux或Mac)或命令提示符(Windows),通过发出以下命令来执行您的应用程序:

java -Djava.library.path= "<path_of_your_application>" –jar <ApplicationJAR.jar>
Run Code Online (Sandbox Code Playgroud)

你错过了实际的命令.使用以下内容

java -Djava.library.path="C:\Opencv2.1.11\opencv\build\java\x64" -jar BlurDetector.jar
Run Code Online (Sandbox Code Playgroud)

要么

java -Djava.library.path="C:\Opencv2.1.11\opencv\build\java" -jar BlurDetector.jar
Run Code Online (Sandbox Code Playgroud)

而不是你的命令

java -Djava.library.path="C:\Users\vivek_elango\Desktop" -jar BlurDetector.jar // you have given wrong path of your application
Run Code Online (Sandbox Code Playgroud)