使用包混淆.NoClassDefFoundError

时间:2016-06-13 22:23:06

标签: java class runtime classpath noclassdeffounderror

我的代码编译成功但不会运行。这是相关的代码。 我用“javac -cp。:/ Users / DavidOwens / javacv-bin / * ICGPixelGetter.java”进行编译,javacv-bin位于我的用户文件夹中。

    //Takes a video file and gets frame grabs of it
    private ArrayList<ImageView> getFrameGrabs() {
        try{
            //get video frames
            FFmpegFrameGrabber g = new FFmpegFrameGrabber("for david.mpeg");

            g.start();

            for (int i = 1 ; i < 10 ; i++) {
                ImageIO.write(g.grab().getBufferedImage(), "jpg", 
                    new File("frame-dump/video-frame-" 
                        + System.currentTimeMillis() + ".png"));
                }

            g.stop();
            }

            catch( Exception ex ){
                System.out.println( "Frame Grab IOException");
            }
        return frameGrabs;
    }//END METHOD

和主要的应用程序启动方法

import java.util.*;
import java.io.*;
import javax.imageio.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.event.EventType;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.input.*;
import javafx.scene.control.ContentDisplay;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.layout.BorderPane;
import javafx.scene.control.Button;
import javafx.scene.paint.Color;
import javafx.scene.text.*;
import javafx.scene.image.*;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import org.bytedeco.javacv.*;
import org.bytedeco.javacpp.*;

@Override //Override start method in Application class
public void start( Stage primaryStage ) { 

    getFrameGrabs();

    //bunch of code that works fine
}

我得到这个堆栈跟踪

    Exception in Application start method
    Exception in thread "main" java.lang.reflect.InvocationTargetException
    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 sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: org/bytedeco/javacv/FFmpegFrameGrabber
    at ICGPixelGetter.getFrameGrabs(ICGPixelGetter.java:112)
    at ICGPixelGetter.start(ICGPixelGetter.java:57)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
Caused by: java.lang.ClassNotFoundException:   org.bytedeco.javacv.FFmpegFrameGrabber
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 8 more

2 个答案:

答案 0 :(得分:0)

为什么不使用IDE编译等?您必须将库包含在您的项目中。

答案 1 :(得分:0)

javacv-bin/是否包含您希望包含在类路径中的一堆JAR文件?如果没有,则类路径的语法错误。您显示的语法包括所有以./为根的类树以及javacv-bin/中包含的所有JAR文件。 <{1}}中找不到.class个文件。

您会发现http://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html很有用。永远是RTM。

此外,您向我们展示的Java代码将无法编译。请按http://sscce.org/中的建议提供完整的,如果精简的示例。