2017-07-24 6 views
0

Ich arbeite an Windows 10 mit jdk1.8 Ich bekomme folgenden Fehler. Ich habe viel versucht, aber nicht den Grund zu finden, warum dieser Fehler zu bekommen, ist Fehler Snap wie folgt.java.lang.NoSuchMethodError: putMemberOffset

java.lang.NoSuchMethodError: putMemberOffset 

at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) 
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) 
at java.lang.Runtime.load0(Runtime.java:809) 
at java.lang.System.load(System.java:1086) 
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:525) 
at org.bytedeco.javacpp.Loader.load(Loader.java:411) 
at org.bytedeco.javacpp.Loader.load(Loader.java:354) 
at org.bytedeco.javacpp.opencv_core.<clinit>(opencv_core.java:10) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:348) 
at org.bytedeco.javacpp.Loader.load(Loader.java:386) 
at org.bytedeco.javacpp.Loader.load(Loader.java:354) 
at org.bytedeco.javacpp.opencv_imgcodecs.<clinit>(opencv_imgcodecs.java:13) 
at com.ob.libj.ProcessImageJavaCV.start(ProcessImageJavaCV.java:23) 
at UTest.testCountThreshold(UTest.java:50) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) 
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) 
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) 

Das ist mein pom.xml

<dependencies> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
    </dependency> 

    <dependency> 
     <groupId>org.bytedeco</groupId> 
     <artifactId>javacv</artifactId> 
     <version>1.3.2</version> 
    </dependency> 

    <dependency> 
     <groupId>org.bytedeco</groupId> 
     <artifactId>javacpp</artifactId> 
     <version>1.3.2</version> 
    </dependency> 

    <dependency> 
     <groupId>org.bytedeco.javacpp-presets</groupId> 
     <artifactId>opencv-platform</artifactId> 
     <version>3.2.0-1.3</version> 
    </dependency> 

    <dependency> 
     <groupId>io.humble</groupId> 
     <artifactId>humble-video-all</artifactId> 
     <version>0.2.1</version> 
    </dependency> 

</dependencies> 

Ich benutze auch neueste Gläser Fidschi.

Ich denke, es muss ein Kompatibilitätsproblem zwischen Opencv und Fiji sein, weil der Fehler kommt, wenn ich beide benutze.

Haben Sie eine Idee, wie Sie es beheben können? danke

+0

Können Sie einen Code bereitstellen? –

+0

Ich würde empfehlen, Abhängigkeitsmanagement-Tool wie in Maven oder Gradle – user8271644

Antwort

1

Dies scheint eine Version Kompatibilitätsproblem sein. Eine der Bibliotheken (es scheint OpenCV zu sein) wurde gegen eine Version des anderen (wahrscheinlich fidschi) kompiliert, die die fragliche Methode enthält (putMemberOffset), aber die Version, die im Klassenpfad verfügbar ist, wenn Sie die Anwendung/den Test ausführen, t enthalten diese Methode, daher der Fehler.

Außerdem könnte es eine andere Bibliothek sein, gegen die sowohl OpenCV als auch Fiji kompiliert wurden, aber in verschiedenen Versionen.

Um das zu beheben, verwenden Sie kompatible Versionen der Bibliotheken. Um herauszufinden, welche Bibliotheken benötigt werden, um herauszufinden, welche Bibliothek in Konflikt steht und von welchen Versionen die verwendeten Bibliotheken abhängen, sollten Sie dies in der Dokumentation dieser Bibliotheken oder in pom.xml oder in mavens Ausgabe (Sie muss möglicherweise die ausführliche Option aktivieren).

+0

zu verwenden, das ist Arbeit danken. Java-Abhängigkeiten sind nicht einfach ^^ – rtisne

+0

@rtisne gut, Abhängigkeiten sind nie einfach;) – Thomas

Verwandte Themen