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