0

我想通过java从网络摄像头拍摄快照。我跟着这个问题来到了这个例子。但是下面一行出现了一个空指针异常 -

Buffer buf = frameGrabber.grabFrame();
Image img = (new BufferToImage((VideoFormat) buf.getFormat())
                .createImage(buf));
        buffImg = new BufferedImage(img.getWidth(this), img.getHeight(this),
                BufferedImage.TYPE_INT_RGB);

通过调试器,我观察到缓冲区实际上并不包含数据。于是我就去创建frameGrabber。

frameGrabber = (FrameGrabbingControl) player
                .getControl("javax.media.control.FrameGrabbingControl");

这段代码有问题吗。因为 JMFStudio 在我的机器上运行良好,但代码无法访问它。谢谢你。

4

1 回答 1

0

我找到了解决方案。JMF 需要时间进行初始化。在示例中,我们必须切换一条线。放在

new Timer(3000, this).start();

在 try catch 之下。

整个块如下所示。

        try {
            player = Manager.createRealizedPlayer(cdi.getLocator());
            player.start();
        } catch (NoPlayerException e) {
            e.printStackTrace();
        } catch (CannotRealizeException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
            new Timer(3000, this).start();
        // Grab a frame from the capture device
        frameGrabber = (FrameGrabbingControl) player
                .getControl("javax.media.control.FrameGrabbingControl");
于 2012-05-16T05:51:32.980 回答