0

我有以下代码使用 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)

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

4

2 回答 2

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。

祝你好运!

于 2013-05-24T13:30:52.883 回答
0

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

于 2013-05-24T17:16:02.807 回答