FrameGrabber NullPointerException

时间:2013-05-24 12:55:57

标签: java opencv nullpointerexception javacv

我有以下代码使用Javacv使用网络摄像头捕获图像。它没有任何问题,但现在它崩溃了NullPointerExeption。

代码:

public class ClientTest {

    public static void main(String[] args) {
         takeImage();

    }

    public static ImageIcon takeImage() {
        FrameGrabber grabber = null;
        IplImage img = null;
        ImageIcon image = null;
        try {
            grabber = FrameGrabber.createDefault(0);
        } catch (com.googlecode.javacv.FrameGrabber.Exception e1) {
            e1.printStackTrace();
        }
        int i = 0;
        try {
            grabber.start();

            img = grabber.grab();
            if (img != null) {
                cvFlip(img, img, 1);
            }
            // Save image
            image = new ImageIcon(img.getBufferedImage());

            grabber.flush();
            grabber.stop();
        } catch (Exception e) {
            Client.showMessage("Error taking image!");
            e.printStackTrace();

        }
        return image;
    }
}

错误:

Exception in thread "main" java.lang.NullPointerException
    at com.googlecode.javacv.FrameGrabber.create(FrameGrabber.java:95)
    at com.googlecode.javacv.FrameGrabber.createDefault(FrameGrabber.java:118)
    at Main.ClientTest.takeImage(ClientTest.java:33)
    at Main.ClientTest.main(ClientTest.java:24)

如果有人能说清楚,我会非常感激,这有点紧迫,因为它是我星期一到期的最后一年项目的一部分...

2 个答案:

答案 0 :(得分:1)

您可能需要查看FrameGrabber源代码,看看您是否可以将它拼凑在一起: https://code.google.com/p/javacv/source/browse/src/main/java/com/googlecode/javacv/FrameGrabber.java?r=5bbb841a1d9b03328ad0c3dbc723ad6903220d62

如果您查看错误,则表示当takeImage调用FrameGrabber.createDefault()时以及FrameGrabber.createDefault()调用create()时发生错误。这两个方法位于第99行和第123行,getDefault()方法位于第62行。尝试浏览这些方法,看看是否可以找出导致问题的输入。

我的猜测是getDefault()方法返回null(可能因为没有扩展FrameGrabber的类),所以create()方法在调用c.getConstructor()时抛出空指针异常,因为c为null

祝你好运!

答案 1 :(得分:0)

我刚刚删除了所有.jar导入并重新导入了它们。现在一切似乎都有用了!