2

可能重复:
尝试从网络摄像头捕获图像时出现 NullPointerException

我看到了这个不错的网络摄像头小程序,但我是 java 的初学者,我正在尝试放另一个JButton调用Capture,它将通过网络摄像头拍照并保存在特定路径中。

我的捕获按钮的代码

startC.addActionListener(new ActionListener()
        {           
            @Override
            public void actionPerformed(ActionEvent e)
            {               
                  // Grab a frame                 
                 FrameGrabbingControl fgc = new FrameGrabbingControl() {

                        @Override
                        public Component getControlComponent() {
                            // TODO Auto-generated method stub
                            return null;
                        }

                        @Override
                        public Buffer grabFrame() {
                            // TODO Auto-generated method stub
                            return null;
                        }
                    };  
                  player.getControl("javax.media.control.FrameGrabbingControl");    
                  buf = fgc.grabFrame();                  

                  // Convert it to an image               
                  BufferToImage btoi = new BufferToImage((VideoFormat)buf.getFormat());
                  img = btoi.createImage(buf);       

                  // show the image 
                  //imgpanel.setImage(img);       

                  // save image 
                  try {
                    saveJPG(img,"c:\\test.jpg");
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });

保存 JPG 方法

      public static void saveJPG(Image img, String s) throws IOException    
      {       
        BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);      
        File outputfile = new File("C:\\saved.jpg");
        ImageIO.write(bi, "png", outputfile);
}

错误

Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
    at com.colorfulwolf.webcamapplet.WebcamApplet$6.actionPerformed(WebcamApplet.java:524)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

在我的第 524 行中,我有代码

BufferToImage btoi = new BufferToImage((VideoFormat)buf.getFormat());

FGC声明

FrameGrabbingControl fgc = new FrameGrabbingControl() {                     
                        @Override
                        public Component getControlComponent() {
                            // TODO Auto-generated method stub
                            return null;
                        }

                        @Override
                        public Buffer grabFrame() {
                            // TODO Auto-generated method stub
                            return null;
                        }
                    };  
4

1 回答 1

3

您的应用程序抛出 NullPointerException,因为您尝试调用空对象的方法,buf.

即使您声明buf = fgc.grabFrame();,您的buf对象也是 null,因为fgc.grabFrame()它返回 null。

@Override
public Buffer grabFrame() {
    // TODO Auto-generated method stub
    return null;
}

要解决此问题,您可以返回new Buffer()而不是null在您的fgc.grabFrame()实现中。

于 2012-09-24T20:27:58.170 回答