Estoy usando Windows10, eclipse-neon con la versión JDK1.8, obtengo la siguiente excepción.
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/putMemberOffsetaquí están las dependencias que estoy usando en mi 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>primer problema
Tus versiones no coinciden. org.bytedeco.javacpp en la versión 0.10 es de diciembre de 2014 , mientras que todas las demás versiones son de mayo de 2016 . Debe usar la versión 1.2 de org.bytedeco.javacpp o, mejor aún, actualizar todas las dependencias a la última versión.
Puedes ver las versiones aquí:
org.bytedeco.javacpp-presets » opencv
org.bytedeco.javacpp-presets » ffmpeg
segundo problema
Incluye las dependencias solo para el código Java, pero no incluye las dependencias para el código nativo (tanto opencv como ffmpeg son bibliotecas nativas). Debe incluir opencv-platform y ffmpeg-platform en su lugar:
<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>Esto hará que Maven descargue e incluya bibliotecas opencv y ffmpeg para Android, Linux, MacOS y Windows, tanto x86 como x64.
java.lang.NoClassDefFoundError: no se pudo inicializar la clase org.bytedeco.javacpp.avutil
La causa real del error son las diferentes versiones de las dependencias. Es por eso que el paquete javacpp falló durante el mapeo de clases.
Siga estos pasos para resolver este problema:
Copie estos tres archivos .jar en la carpeta libs
ffmpeg.jarjavacv.jarjavacpp.jar Crear carpeta jniLibs en app\src\main
Ahora, cree cuatro carpetas diferentes para diferentes arquitecturas
arm64-v8aarmeabiarmeabi-v7ax86 Cambie la extensión de estos dos archivos ffmpeg-android-arm.jar, ffmpeg-android-x86.jar a .zip , luego descomprima ambas carpetas y copie los archivos .so para cada arquitectura y péguelos en su directorio respectivo. Su directorio resultante debería verse así
Agregue dependencias .jar en su archivo gradle de la siguiente manera:
implementation files('libs/ffmpeg.jar') implementation files('libs/javacpp.jar') implementation files('libs/javacv.jar')```Gracias por leer :)
Intente actualizar las dependencias con las últimas versiones y verifique si la clase existe o no.
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