JMF. Could not connect to capture device

Estou com um problema com o Java Media Framework, preciso fazer uma aplicação para tirar uma foto pela webcam, o meu programa até aparece a tela perguntando qual dispositivo eu quero usar, mas quando eu seleciono o dispositivo ele da esse erro:
java.io.IOException: Could not connect to capture device

Alguem sabe o que pode ser?

Abaixo o código que eu estou usando, agradeço quem poder ajudar.

[code]
package util;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.cdm.CaptureDeviceManager;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class CapturaFoto extends JPanel {

public static Player player = null;  
public CaptureDeviceInfo di = null;    
public MediaLocator ml = null;    
public JButton capture = null;  
public Buffer buf = null;  
public Image img = null;  
public VideoFormat vf = null;  
public BufferToImage btoi = null;  
public ImagePanel imgpanel = null;  

private static final long serialVersionUID = 1L;  
private JButton captura = null;  


public CapturaFoto() {  
    super();  
    initialize();  
}  


private void initialize() {  
    this.setLayout(new BorderLayout());  
    this.setSize(327, 259);  
    this.add(getCaptura(), BorderLayout.SOUTH);  
    this.setVisible(true);  
      

    String str2 = "vfw//0";  
    di = CaptureDeviceManager.getDevice(str2);  
    ml =  new MediaLocator("vfw://0");  
    try {  
        player = Manager.createRealizedPlayer(ml);  
        player.start();  
        Component comp;  
        if ((comp = player.getVisualComponent()) != null) {  
            add(comp, BorderLayout.NORTH);  
        }  
        add(captura, BorderLayout.SOUTH);  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
  
}  

public void gravaImg (Image imagem){          
    String caminho = "C:\\" + "\\Fotos\\"+"001"+".JPG";  
    try {  
        ImageIO.write((RenderedImage) imagem, "jpg", new File(caminho));  
        JOptionPane.showMessageDialog(this, "Imagem Capturada!");  
    } catch (IOException e) {  
        JOptionPane.showMessageDialog(null, "não foi possivel encontrar " +  
                "o dispositivo para a captura da imagem.");  
        e.printStackTrace();  
    }  
      
}  
private JButton getCaptura() {  
    if (captura == null) {  
        captura = new JButton("Captura");  
        captura.setBounds(50, 50, 50, 50);  
        captura.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent e) {  
                FrameGrabbingControl fgc = (FrameGrabbingControl) player  
                        .getControl("javax.media.control.FrameGrabbingControl");  
                buf = fgc.grabFrame();  
                btoi = new BufferToImage((VideoFormat) buf.getFormat());  
                img = btoi.createImage(buf);  
                gravaImg(img);  
            }  
        });  
    }  
    return captura;  
}  
  
class ImagePanel extends Panel {  

    private static final long serialVersionUID = 1L;  
    public Image myimg = null;  

    public ImagePanel() {  
        JOptionPane.showMessageDialog(null, "setando a classe");  
        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);  
        }  
    }  

}  

public static void main(String[] args) {
	CapturaFoto c = new CapturaFoto();
	c.setVisible(true);
}

} [/code]

Cara estes tempos atrás fiz um programa para isso porém utilizei o DSJ, achei bem melhor e mais simples de se utilizar.

Se você quiser utilizar ou ver como ficou é só acessar o link abaixo, fiz essa aplicação utilizando o DSJ.
http://www.thinkti.com.br/webcam.html

Espero que ajude,

abs,

Evandro

[quote=Evandro_Contato]Cara estes tempos atrás fiz um programa para isso porém utilizei o DSJ, achei bem melhor e mais simples de se utilizar.

Se você quiser utilizar ou ver como ficou é só acessar o link abaixo, fiz essa aplicação utilizando o DSJ.
http://www.thinkti.com.br/webcam.html

Espero que ajude,

abs,

Evandro[/quote]

jmf tá descontinuada hà muito tempo. Eu mesmo venho postando a mesma resposta em tópicos porque o pessoal não procura no fórum. E já faz anos que venho fazendo isso. Eu imagino que a jmf não funciona mais no win7, já que a vfw(vídeo for windows) foi abolida ainda na época do vista.

Cara, acho que se há uma forma decente de ter webcam integrado com java multiplataforma, uma alternativa caso seja possível, é integrar flash com algum componente java e fazer controle via socket. Nunca fiz isso e nem sei se é possível, quem sabe alguém anima testar.