I'm trying to configure a webcam for a java application
code give error
getting NullPointerException at javax.media.Manager.createPlayer(Manager.java:482)
in line
videoDataSource = Manager.createDataSource(videoDevice.getLocator());
Source:
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.ControllerAdapter;
import javax.media.ControllerEvent;
import javax.media.Format;
import javax.media.Manager;
import javax.media.NoDataSourceException;
import javax.media.Player;
import javax.media.RealizeCompleteEvent;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.protocol.DataSource;
import javax.media.util.BufferToImage;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TestWebCam {
  static JPanel             panel       = new JPanel();
  static JFrame             myFrame     = new JFrame();
  static Player             player      = null;
  static CaptureDeviceInfo  videoDevice = null;
  static VideoFormat        videoFormat = null;
  public void actionPerformed(ActionEvent ae) { }
  public static void main(String[] argv) {
    //PANEL.           
    panel = new JPanel();
    panel.setLayout(new FlowLayout());      
    //CREATE FRAME.
    myFrame = new JFrame();
    myFrame.setVisible(true);
    myFrame.setSize(300,300);
    myFrame.getContentPane().add(panel);     
    myFrame.addWindowListener(
      new WindowAdapter(){
        public void windowClosing(WindowEvent event){  
     //     player.close();
          myFrame.dispose();
        }
      }
    );                         
    //GET ALL MEDIA DEVICES.
    Vector deviceListVector = CaptureDeviceManager.getDeviceList(null);
    //CHOOSE AUDIO DEVICES & FORMAT.
    for (int x = 0; x < deviceListVector.size(); x++)    {
      CaptureDeviceInfo device         = (CaptureDeviceInfo) deviceListVector.elementAt(x);
      String            deviceName     = device.getName();           
      Format            deviceFormat[] = device.getFormats();
      for (int y = 0; y < deviceFormat.length; y++)      {                      
        if (videoDevice == null && deviceFormat[y] instanceof VideoFormat) {
          videoFormat = (VideoFormat) deviceFormat[y];
          if(videoFormat.toString().indexOf("640")!=-1) {
            videoDevice = device;
            System.out.println(videoFormat);
          }
        }
      }
    }       
    //VIDEO DATA SOURCE.
    DataSource videoDataSource = null;
    try {
        videoDataSource = Manager.createDataSource(videoDevice.getLocator());
    } catch (Exception e) {
        // TODO Auto-generated catch block
        JOptionPane.showMessageDialog(null, e.getLocalizedMessage());
    }
//    DeviceInfo.setFormat(videoDataSource, videoFormat);
    //CREATE PLAYER.
    try {
        player = Manager.createPlayer(videoDataSource);
    } catch (NoPlayerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    player.addControllerListener(
        new ControllerAdapter(){
          public void controllerUpdate(ControllerEvent event){  
            if (event instanceof RealizeCompleteEvent) {
              panel.add(player.getVisualComponent());
              panel.add(player.getControlPanelComponent());
              myFrame.validate();
            }
          }
        }
    );        
    player.start();     
    //GRAB IMAGE.
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    FrameGrabbingControl fgc  = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl");  
    Buffer               buf  = fgc.grabFrame();
    BufferToImage        btoi = new BufferToImage((VideoFormat)buf.getFormat());    
    Image                img  = btoi.createImage(buf);
    saveImagetoFile(img,"Dots.jpg");
    panel.add(new JLabel(new ImageIcon(img)));  //Expand window to see the image.
    panel.validate();
  } 
  static public void saveImagetoFile(Image img, String fileName)  {
    int           w = img.getWidth(null);
    int           h = img.getHeight(null);
    BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    Graphics2D    g2 = bi.createGraphics();
                  g2.drawImage(img, 0, 0, null);
                  g2.dispose();
    String fileType = fileName.substring(fileName.indexOf('.')+1);
    try {
        ImageIO.write(bi, fileType, new File(fileName));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        JOptionPane.showMessageDialog(null, e.getMessage());
    }
  } 
}
				
                        
you need to add
breakIn block :Because if there is a more than a one source as a device then you will use the last which could be another source , and usually the webcam is the first device in the device list in Java media framework
And when you want to use a player you must realize it first by either calling
player.realize()or by creating a realized player by usingManager.createRealizedPlayer(source)(the method names might be in accurate)Player.realizeis not a blocking function meaing it will be executed on a different thread whileManager.createRealizedPlayer(source)is a blocking function and will halt execution until the player is realizedAfter realizing a player you can call
Player.start()