可能重复:
尝试从网络摄像头捕获图像时出现NullPointerException
我看到了这个很好的网络摄像头小程序,但我是java的初学者,我正在尝试放置另一个名为Capture
的JButton
,它将通过网络摄像头拍照并保存在特定路径中。
我的捕获按钮代码
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
。