2016-06-08 1256 views
0

我有一個java應用程序,它使用bytedeco/javacv庫。線程「main」中的異常java.lang.NoClassDefFoundError無法初始化類org.bytedeco.javacpp.avutil

但是當我運行該應用程序時,出現以下異常。

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

此外,該下面的語句,我們需要可以設置javacpp.platform系統 財產(通過-D命令行選項)類似於 android-arm,或者將javacpp.platform.dependencies之一設置爲true爲 獲取所有binari適用於Android,Linux,Mac OS X和Windows。在 構建系統不起作用的情況下,我們需要手動添加 平臺特定的構件。有關Gradle和 sbt的示例,請參閱JavaCPP預設的README.md文件。 另一個可用於Scala用戶的選項是sbt-javacv。

〜參考文獻GitHub

我增加了參數-Djavacpp.platform.dependencies =「true」,但我仍然得到異常。我不確定是什麼導致了這個問題,我在使用C++包裝方面的經驗非常少。

PS:我沒有在我的機器上安裝任何C++依賴項/庫或open-cv。 而所有的解決方案都與Android相關,並且在我的java相關應用程序中沒有太多運氣。

+0

C++如何進入圖片? – Ajay

+0

我假設,javacv是opencv的封裝器 –

+0

即使C++語言對此問題沒有任何作用。 – Ajay

回答

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>