java.lang.NoClassDefFoundError: Could not initialize class org.bytedeco.javacpp.avutil
java.lang.NoClassDefFoundError: Could not initialize class org.bytedeco.javacpp.avutil
我正在使用Windows10, eclipse-neon 与 JDK1.8 版本,
我收到以下异常。
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:385)
at org.bytedeco.javacpp.Loader.load(Loader.java:353)
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.segment.processor.AudioMain.main(ApacheMathAudioMain.java:20)
Error getting static method ID of org/bytedeco/javacpp/Loader/putMemberOffset
这是我在 pom.xml
中使用的依赖项
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg</artifactId>
<version>3.0.2-1.2</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>opencv</artifactId>
<version>3.1.0-1.2</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>0.10</version>
</dependency>
尝试使用最新版本更新依赖项并检查class是否存在
https://mvnrepository.com/artifact/org.bytedeco/javacv/1.4.1
https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/ffmpeg/3.4.2-1.4.1
https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/opencv/3.4.1-1.4.1
第一个问题
你的版本不匹配。版本 0.10
中的 org.bytedeco.javacpp
来自 2014 年 12 月,而所有其他版本来自 2016 年 5 月。您需要使用 org.bytedeco.javacpp
的 1.2
版本,或者更好的是,将所有依赖项更新到最新版本。
您可以在此处查看版本:
org.bytedeco.javacpp-presets » opencv
org.bytedeco.javacpp-presets » ffmpeg
第二题
您仅包括 Java 代码的依赖项,但不包括本机代码的依赖项(opencv 和 ffmpeg 都是本机库)。您需要改为包括 opencv-platform
和 ffmpeg-platform
:
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>opencv-platform</artifactId>
<version>3.4.1-1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>3.4.2-1.4.1</version>
</dependency>
这将使 Maven 下载并包括用于 Android、Linux、MacOS 和 Windows、x86 和 x64 的 opencv 和 ffmpeg 库。
这意味着 class 在编译时存在,但在运行时缺失。您有几个选择:
始终使用 Maven 插件执行。
在 运行 时将库包含在 class 路径中。
使用 Maven Shade 插件制作包含依赖项的 Uber-Jar。
希望对您有所帮助!
java.lang.NoClassDefFoundError: Could not initialize class org.bytedeco.javacpp.avutil
实际错误原因是依赖版本不同。这就是 javacpp
包在映射 类 期间失败的原因。
按照以下步骤解决此问题:
- 从here下载最新版本的Javacv库包
将这三个 .jar
文件复制到 libs
文件夹中
ffmpeg.jar
javacv.jar
javacpp.jar
在 app\src\main
中创建 jniLibs
文件夹
现在,为不同的架构创建四个不同的文件夹
arm64-v8a
armeabi
armeabi-v7a
x86
将这两个文件的扩展名 ffmpeg-android-arm.jar, ffmpeg-android-x86.jar
更改为 .zip
然后解压缩两个文件夹并为每个体系结构复制 .so
文件并粘贴到其相关目录中。您的结果目录应如下所示
在您的 gradle 文件中添加 .jar
依赖项,如下所示:
implementation files('libs/ffmpeg.jar')
implementation files('libs/javacpp.jar')
implementation files('libs/javacv.jar')```
感谢阅读:)
我正在使用Windows10, eclipse-neon 与 JDK1.8 版本, 我收到以下异常。
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:385)
at org.bytedeco.javacpp.Loader.load(Loader.java:353)
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.segment.processor.AudioMain.main(ApacheMathAudioMain.java:20)
Error getting static method ID of org/bytedeco/javacpp/Loader/putMemberOffset
这是我在 pom.xml
中使用的依赖项 <dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg</artifactId>
<version>3.0.2-1.2</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>opencv</artifactId>
<version>3.1.0-1.2</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>0.10</version>
</dependency>
尝试使用最新版本更新依赖项并检查class是否存在
https://mvnrepository.com/artifact/org.bytedeco/javacv/1.4.1 https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/ffmpeg/3.4.2-1.4.1 https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/opencv/3.4.1-1.4.1
第一个问题
你的版本不匹配。版本 0.10
中的 org.bytedeco.javacpp
来自 2014 年 12 月,而所有其他版本来自 2016 年 5 月。您需要使用 org.bytedeco.javacpp
的 1.2
版本,或者更好的是,将所有依赖项更新到最新版本。
您可以在此处查看版本:
org.bytedeco.javacpp-presets » opencv
org.bytedeco.javacpp-presets » ffmpeg
第二题
您仅包括 Java 代码的依赖项,但不包括本机代码的依赖项(opencv 和 ffmpeg 都是本机库)。您需要改为包括 opencv-platform
和 ffmpeg-platform
:
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>opencv-platform</artifactId>
<version>3.4.1-1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>3.4.2-1.4.1</version>
</dependency>
这将使 Maven 下载并包括用于 Android、Linux、MacOS 和 Windows、x86 和 x64 的 opencv 和 ffmpeg 库。
这意味着 class 在编译时存在,但在运行时缺失。您有几个选择:
始终使用 Maven 插件执行。
在 运行 时将库包含在 class 路径中。
使用 Maven Shade 插件制作包含依赖项的 Uber-Jar。
希望对您有所帮助!
java.lang.NoClassDefFoundError: Could not initialize class org.bytedeco.javacpp.avutil
实际错误原因是依赖版本不同。这就是 javacpp
包在映射 类 期间失败的原因。
按照以下步骤解决此问题:
- 从here下载最新版本的Javacv库包
将这三个
.jar
文件复制到libs
文件夹中ffmpeg.jar
javacv.jar
javacpp.jar
在
app\src\main
中创建 现在,为不同的架构创建四个不同的文件夹
arm64-v8a
armeabi
armeabi-v7a
x86
将这两个文件的扩展名
ffmpeg-android-arm.jar, ffmpeg-android-x86.jar
更改为.zip
然后解压缩两个文件夹并为每个体系结构复制.so
文件并粘贴到其相关目录中。您的结果目录应如下所示在您的 gradle 文件中添加
.jar
依赖项,如下所示:implementation files('libs/ffmpeg.jar') implementation files('libs/javacpp.jar') implementation files('libs/javacv.jar')```
jniLibs
文件夹
感谢阅读:)