Я написал код на Java для доступа к веб-камере и сохранения изображения ...
Я получаю следующие исключения:
Исключение в потоке "main" java.lang.NullPointerException
в SwingCapture. (SwingCapture.java:40)
в SwingCapture.main (SwingCapture.java:66)
как убрать это исключение.
вот код:
import javax.swing.*;
import javax.swing.event. ;
импорт java.io. ;
импорт javax.media. ;
импорт javax.media.format. ;
import javax.media.util. ;
импорт javax.media.control. ;
импорт javax.media.protocol. ;
import java.util. ;
импорт java.awt. ;
import java.awt.image. ;
import java.awt.event. ;
import com.sun.image.codec.jpeg. ;
открытый класс SwingCapture расширяет Panel реализует ActionListener
{
public static Player player = null;
public CaptureDeviceInfo di = null;
public MediaLocator ml = null;
public JButton capture = null;
public Buffer buf = null;
общедоступное изображение img = null;
public VideoFormat vf = null;
public BufferToImage btoi = null;
public ImagePanel imgpanel = null;
public SwingCapture ()
{
setLayout (new BorderLayout ());
SetSize (320550);
imgpanel = new ImagePanel();
capture = new JButton("Capture");
capture.addActionListener(this);
String str1 = "vfw:iNTEX IT-308 WC:0";
String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
di = CaptureDeviceManager.getDevice(str2);
ml = di.getLocator();
try
{
player = Manager.createRealizedPlayer(ml);
player.start();
Component comp;
if ((comp = player.getVisualComponent()) != null)
{
add(comp,BorderLayout.NORTH);
}
add(capture,BorderLayout.CENTER);
add(imgpanel,BorderLayout.SOUTH);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main (аргументы String [])
{
Frame f = new Frame ("SwingCapture");
SwingCapture cf = new SwingCapture ();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
playerclose();
System.exit(0);}});
f.add("Center",cf);
f.pack();
f.setSize(new Dimension(320,550));
f.setVisible(true);
}
public static void playerclose ()
{
player.close ();
player.deallocate ();
}
public void actionPerformed (ActionEvent e)
{
JComponent c = (JComponent) e.getSource ();
if (c == capture)
{
// Grab a frame
FrameGrabbingControl fgc = (FrameGrabbingControl)
player.getControl("javax.media.control.FrameGrabbingControl");
buf = fgc.grabFrame();
// Convert it to an image
btoi = new BufferToImage((VideoFormat)buf.getFormat());
img = btoi.createImage(buf);
// show the image
imgpanel.setImage(img);
// save image
saveJPG(img,"\test.jpg");
}
}
класс ImagePanel расширяет панель
{
общедоступное изображение myimg = null;
public ImagePanel()
{
setLayout(null);
setSize(320,240);
}
public void setImage(Image img)
{
this.myimg = img;
repaint();
}
public void paint(Graphics g)
{
if (myimg != null)
{
g.drawImage(myimg, 0, 0, this);
}
}
}
публичная статическая пустота saveJPG (изображение, строки)
{
BufferedImage bi = new BufferedImage (img.getWidth (null), img.getHeight (null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics ();
g2.drawImage (img, null, null);
FileOutputStream out = null;
try
{
out = new FileOutputStream(s);
}
catch (java.io.FileNotFoundException io)
{
System.out.println("File Not Found");
}
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(0.5f,false);
encoder.setJPEGEncodeParam(param);
try
{
encoder.encode(bi);
out.close();
}
catch (java.io.IOException io)
{
System.out.println("IOException");
}
}
} * * тысяча пятьдесят-один