我有一个使用nh.Invoke(this, e);
库的java应用程序。
但是当我运行应用程序时,我收到以下异常。
bytedeco/javacv
代码如下,
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
根据README.MD中的以下声明
此外,我们需要设置javacpp.platform系统 属性(通过-D命令行选项)到类似的东西 android-arm,或者将javacpp.platform.dependencies设置为true 获取Android,Linux,Mac OS X和Windows的所有二进制文件。上 构建系统,这不起作用,我们需要添加 特定于平台的工件。有关Gradle和。的示例 sbt,请参考JavaCPP预设的README.md文件。 Scala用户可以使用的另一个选项是sbt-javacv。
〜参考GitHub。
我添加了参数-Djavacpp.platform.dependencies =&#34; true&#34;,但我仍然得到了异常。我不确定是什么导致了这个问题,我在使用c ++包装器方面的经验非常少。
PS:我的机器中没有安装任何c ++依赖项/库或open-cv。 并且所有的解决方案都与Android有关,而且我在我的java相关应用程序中没有那么幸运。
答案 0 :(得分:1)
添加以下依赖项解决了这个问题。
<!-- 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>