尝试从Java Applet保存网络摄像头图像时出现NullPointerException



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

我看到了这个很好的网络摄像头小程序,但我是java的初学者,我正在尝试放置另一个名为CaptureJButton,它将通过网络摄像头拍照并保存在特定路径中。

我的捕获按钮代码

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;
}
};  

您的应用程序会抛出NullPointerException,因为您试图调用null对象buf上的方法。

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

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

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

最新更新