Problema JMF + ntebeans + win7 x64

3 respostas
A

Pessoal, estou com o seguinte problema, instalaei o JMF 2.1.1, no software que vem junt ocom ele, ele mostra a webcam e tudo mais, ou seja funciona perfeitamente, mas quando vou usar ele no netbeans ou que for ele me retorna o seguinte erro:

run:
Exception in thread "VFW Request Thread" java.lang.UnsatisfiedLinkError: JMFSecurityManager: java.lang.UnsatisfiedLinkError: C:\Program Files (x86)\JMF2.1.1e\lib\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.<clinit>(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)

erro ao apertar botão

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at drentrega.CapturaFoto$1.actionPerformed(CapturaFoto.java:89)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6216)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5981)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4583)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4413)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4413)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
CONSTRUÇÃO PARADA (tempo total: 7 segundos)

aqui está a classe que estou usando (achei ela em outro tópico e modifiquei meia duzia de linhas)

package drentrega;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
import javax.swing.JButton;
import javax.swing.JOptionPane;

public class CapturaFoto extends javax.swing.JFrame {

    private static final long serialVersionUID = 1L;
    public static Player player = null;
    public CaptureDeviceInfo di = null;  //  @jve:decl-index=0:
    public MediaLocator ml = null;  //  @jve:decl-index=0:
    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 JButton captura = null;

    public CapturaFoto() {
        super();
        initComponents();
        initialize();
        this.setSize(600, 530);
        setLocation(170, 05);
    }

    private void initialize() {
        this.setLayout(new BorderLayout());
        this.setSize(600, 500);
        this.add(getCaptura(), BorderLayout.SOUTH);
        this.setVisible(true);
        String str2 = "vfw://0";
        di = CaptureDeviceManager.getDevice(str2);
        ml = new MediaLocator("vfw:Microsoft WDM Image Capture (Win32):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) throws IOException {
        String caminho = "C:/photos" + "00" + ".JPG";
        try {
            ImageIO.write((RenderedImage) imagem, "jpg", new File(caminho));
            JOptionPane.showMessageDialog(this, "Imagem Capturada!");
            player.close();
        } 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(10, 10, 600, 500);
            captura.addActionListener(new java.awt.event.ActionListener() {

                @Override
                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);
                    try {
                        player.stop();
                        gravaImg(img);
                    } catch (IOException ex) {
                        Logger.getLogger(CapturaFoto.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            });
        }
        return captura;
    }

    class ImagePanel extends javax.swing.JPanel {

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

        public ImagePanel() {
            JOptionPane.showMessageDialog(null, "setando a classe");
            setLayout(null);
            setSize(630, 530);
        }

        public void setImage(Image img) {
            this.myimg = img;
            repaint();
        }

        @Override
        public void paint(Graphics g) {
            if (myimg != null) {
                g.drawImage(myimg, 0, 0, this);
            }
        }
    }

    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Capturar Foto");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 607, Short.MAX_VALUE));
        layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 489, Short.MAX_VALUE));

        pack();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new CapturaFoto().setVisible(true);
            }
        });
    }
}

a janela é aberta e tudo, mas a imagem da web não e mostrada, ela não é ligada (luz do lado mostra se camera está em uso ou não),
se vocês puderem me dar uma luz do que fazer ficaria muito grato, agora pergunta que não quer calar é porque no JMStudio tudo funciona e aqui não?

estou utilizando o Windows Seven 64bits, o mais atualizado possível

ps.: não tenho como testar no XP por enquanto para ver se funciona, mas segunda-feira farei o teste e posto a resposta.

3 Respostas

G

vamus por eliminação. seu JDK é 64 bits? e acredito q está dando a exception NullPointerException porque você deve ta tentando usar algum atributo nulo.

A

não me liguei nisso, meu JDK é 64 bit sim, mas tenho o JRE 64 e 32, por isso o JMStudio funciona, ele deve rodar sobre o java 32 bits que está em execução.

Existe algum meio de resolver esse “problema” sem precisar instalar o JDK 32 bits? ou existe como ter os dois instalados?

o java.lang.NullPointerException se da porque ele tenta pegar a imagem que não existe (pois ja havia dado erro antes ao carrega-la).

A

um dos problemas foi resolvido, só ajeitei para ele rodar com o java 32 bits e não o 64, ai funcionou 100%… :smiley:

a unica coisa agora é que a imagem está ocupando só metade do espaço, mais isso dou um jeito de resolver, outro problema foi a questão de permição para salvar as fotos no c: como estava no código, alterei para o diretório local. :shock:

:arrow: tive problemas também pois ele não estava achando nenhum dispositivo, o que fiz foi copiar todos os arquivos do JMF2.1.1e\lib para dentro da pasta de bibliotecas do projeto.

Criado 12 de março de 2010
Ultima resposta 12 de mar. de 2010
Respostas 3
Participantes 2