java - 线程 "main"java.lang.NoClassDefFoundError 中出现异常无法初始化类 org.bytedeco.javacpp.avutil

标签 java opencv javacv

我有一个使用bytedeco/javacv库的java应用程序。

但是当我运行该应用程序时,出现以下异常。

Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.bytedeco.javacpp.avutil
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.bytedeco.javacpp.Loader.load(Loader.java:386)
    at org.bytedeco.javacpp.Loader.load(Loader.java:354)
    at org.bytedeco.javacpp.avformat$AVFormatContext.<clinit>(avformat.java:2719)
    at org.bytedeco.javacv.FFmpegFrameGrabber.startUnsafe(FFmpegFrameGrabber.java:391)
    at org.bytedeco.javacv.FFmpegFrameGrabber.start(FFmpegFrameGrabber.java:385)
    at com.diyoron.ai.examples.VideoFrameProccessor.main(VideoFrameProccessor.java:38)
Error getting static method ID of org/bytedeco/javacpp/Loader/putMemberOffset

代码如下,

  String videoPath = video.getAbsolutePath();
  FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoPath);
  grabber.start();

根据 README.MD 中的以下声明

Additionally, we need to either set the javacpp.platform system property (via the -D command line option) to something like android-arm, or set the javacpp.platform.dependencies one to true to get all the binaries for Android, Linux, Mac OS X, and Windows. On build systems where this does not work, we need to add the platform-specific artifacts manually. For examples with Gradle and sbt, please refer to the README.md file of the JavaCPP Presets. Another option available for Scala users is sbt-javacv.

~引用GitHub .

我添加了参数 -Djavacpp.platform.dependency="true",但我仍然收到异常。我不确定是什么导致了这个问题,我在使用 C++ 包装器方面经验很少。

PS:我没有在我的机器上安装任何 c++ 依赖项/库或 open-cv。 所有的解决方案都与 Android 相关,我在我的 java 相关应用程序中遵循这些解决方案并没有太多运气。

最佳答案

添加以下依赖项解决了该问题。

        <!-- http://mvnrepository.com/artifact/org.bytedeco/javacv -->
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- http://mvnrepository.com/artifact/org.bytedeco/javacpp -->
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacpp</artifactId>
            <version>1.2.1</version>
        </dependency>


        <dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>opencv</artifactId>
            <version>3.1.0-1.2</version>
        </dependency>

        <dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>ffmpeg</artifactId>
            <version>3.0.2-1.2</version>
        </dependency>

关于java - 线程 "main"java.lang.NoClassDefFoundError 中出现异常无法初始化类 org.bytedeco.javacpp.avutil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37698855/

相关文章:

java - 虚拟键盘上方的 PopupWindow

android - 为什么我的 copyTo 函数没有将掩码复制到正确的 Mat 上?

python-3.x - 带有光流的箭袋图?

java - Android JavaCV - UnsatisfiedLinkError并且找不到 "libopencv_core.so"

android - 录制视频的问题

java - 编译程序时出现错误 'void' type not allowed here

java - 如何从谷歌日历中的辅助日历中获取数据?

opencv - 在 OpenCV 中浏览视频非常耗费 CPU,为什么看视频却没有那么耗费资源?

javaCV 未满足链接错误

java - 无法从其他类访问公共(public)实例