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

码:

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)

如果有人能提供一些帮助,我将不胜感激,这有点紧迫,因为这是我的最后一年项目的一部分,该项目将于周一到期...

最佳答案

您可能需要查看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()时会抛出null指针异常,因为c为null。

祝好运!

关于java - FrameGrabber NullPointerException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16735498/

10-10 19:02