Ajuda JMF!

Boa tarde, comunidade java…
Venho pedira ajuda…
Estou desenvolvendo uma aplicação onde preciso utilizar a web cam para capturar uma imagem.
Então optei pelo JMF…
Tipo que já instalei ele e está corretamente configurado pois quando o JMF Registry e JMStudio minha web cam funciona bacana.
Agora o problema é que qndo estou rodando meu código recebo a seguinte informação:

[color=red]Exception in thread “VFW Request Thread” java.lang.UnsatisfiedLinkError: JMFSecurityManager: java.lang.UnsatisfiedLinkError: no jmvfw in java.library.path
at com.sun.media.JMFSecurityManager.loadLibrary(JMFSecurityManager.java:206)
at com.sun.media.protocol.vfw.VFWCapture.(VFWCapture.java:19)
at com.sun.media.protocol.vfw.VFWSourceStream.doConnect(VFWSourceStream.java:241)
at com.sun.media.protocol.vfw.VFWSourceStream.run(VFWSourceStream.java:763)
at java.lang.Thread.run(Thread.java:619)[/color]

Bom se alguém puder me ajudar agradeço…
abraços

import java.awt.*;
import javax.media.*;
import javax.media.format.AudioFormat;
import javax.media.format.VideoFormat;
import javax.swing.*;
import java.awt.event.*;

public class Main {

    public static Player player = null;
    public static CaptureDeviceInfo di = null;
    public static MediaLocator ml = null;

//-------- Inicio
    public static void main(String[] args) {

        //CaptureDeviceInfo deviceInfo =
        //CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0");

        //------------
        // Busca de informações dos dispositivos de captura registrados

        java.util.Vector deviceListVector = CaptureDeviceManager.getDeviceList(null);
        if (deviceListVector == null) {
            System.out.println("... error: media device list vector is null, program aborted");
            System.exit(0);
        }
        if (deviceListVector.size() == 0) {
            System.out.println("... error: media device list vector size is 0, program aborted");
            System.exit(0);
        }

        for (int x = 0; x < deviceListVector.size(); x++) {
            // display device name
            CaptureDeviceInfo deviceInfo = (CaptureDeviceInfo) deviceListVector.elementAt(x);
            String deviceInfoText = deviceInfo.getName();
            System.out.println("device " + x + ": " + deviceInfoText);

            // display device formats
            Format deviceFormat[] = deviceInfo.getFormats();

            for (int y = 0; y < deviceFormat.length; y++) {
                // serach for default video device
                if (deviceFormat[y] instanceof VideoFormat) {
                    System.out.println(">>> capture video device = " + deviceFormat[y].toString());
                }
                if (deviceFormat[y] instanceof AudioFormat) {
                    System.out.println(">>> capture audio device = " + deviceFormat[y].toString());
                }
            }
        }
        System.out.println("fim da listagem ");
        // --------

        // Inicialização dos componentes para viusalização

        JFrame frame1 = new JFrame("Primeiro teste de captura");  // JFrame de Teste
        JButton botao_stop = new JButton("Sair");

        //container onde serão adicionados todos componentes
        Container container1 = frame1.getContentPane();
        JPanel panel1 = new JPanel();

        container1.add(botao_stop, BorderLayout.EAST);
        botao_stop.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                player.close();
                player.deallocate();
                System.exit(0);
            }
        });

        String str1 = "vfw:Microsoft WDM Image Capture (Win32):0";


        di = CaptureDeviceManager.getDevice(str1);
        ml = di.getLocator();

        try {
            player = Manager.createRealizedPlayer(ml);
            System.out.println("Valor de time base: " + player.getTimeBase().getTime());
            player.start();

            Component comp, compcontrol;
            if ((comp = player.getVisualComponent()) != null) {
                compcontrol = player.getControlPanelComponent();
                panel1.add(comp, BorderLayout.SOUTH);
                container1.add(compcontrol, BorderLayout.SOUTH);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        container1.add(panel1, BorderLayout.NORTH);

        frame1.pack();
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// fecha a aplicação
        frame1.setVisible(true);

    }
}

Me lembro que tive o problema que vc esta falando, e resolvi colocando os arquivos .dll dentro da pasta BIN do JRE.
Eu criei um cadastro de funcionarios que tirava as fotos pela webcam, mas o JMF se tornou muito trabalhoso pq tinha que instalar ele nas maquinas dos clientes e então acabei criando um sw em delphi que tirava as fotos e gerava ela no mesmo diretorio do programa em delphi.exe. Quando a janela do sw em delphi era fechada eu testava se o arquivo foi criado e jogava no banco… ficou bem mais funcional, pois nao preciso configurar nada.
O programinha em delphi ja abre com a webcam padrao da maquina, caso tenha mais de uma web cam vc pode selecionar outra.

Bacana Jean…
Mas gostaria de conseguir implementas isso em meu sistema utilizando Java mesmo…
Mas obrigado por sua contribuição…

Dei uma olhada aqui no seu erro e é com certeza o que eu tinha falado acima.
Vc tem que colocar os dois arquivos jmvcm.dll e jmvfw.dll dentro da pasta bin do jre principal.
Isso ira resolver seu problema.

Obrigado pela ajuda Jean…
Mas agora o erro apareceu o seguinte…

Exception in thread “VFW Request Thread” java.lang.UnsatisfiedLinkError: JMFSecurityManager: java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jdk1.6.0_18\jre\bin\jmvfw.dll: Can’t load IA 32-bit .dll on a AMD 64-bit platform
at com.sun.media.JMFSecurityManager.loadLibrary(JMFSecurityManager.java:206)
at com.sun.media.protocol.vfw.VFWCapture.(VFWCapture.java:19)
at com.sun.media.protocol.vfw.VFWSourceStream.doConnect(VFWSourceStream.java:241)
at com.sun.media.protocol.vfw.VFWSourceStream.run(VFWSourceStream.java:763)
at java.lang.Thread.run(Thread.java:619)

Bem pelo jeito vc esta usando uma JRE 64 bits mas o JMF só funciona em 32, aconteceu o mesmo comigo.
Vc tem que instalar um jre 32 bits.

Demorô vou tentar aqui e depois te falo…
Obrigado

Obrigado, Jean. Realmente o problema das bibliotecas combinado com eu utilizar uma JRE 64 bits, estavam fazendo com que eu não conseguisse fazer a minha aplicação funcionar.
Só tenho que agradecer.

Muito obrigado.

ATT,

Filipe Nonato
www.twitter.com/filipe_nonato