我有以下代码使用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)
如果有人能说清楚,我会非常感激,这有点紧迫,因为它是我星期一到期的最后一年项目的一部分...
答案 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导入并重新导入了它们。现在一切似乎都有用了!