Applet c/ WebCam

Boa tarde.

Tenho esse seguinte applet:

import java.applet.Applet;   
import java.awt.BorderLayout;   
import java.awt.Component;   
import java.awt.Graphics;   
import java.awt.Image;   
import java.awt.event.ActionEvent;   
import java.awt.event.ActionListener;   
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.JComponent;   
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;   
import TO.VisitanteTO;
  
public class WebCamVisitante extends Applet implements ActionListener {   
  
    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 void init() {   
    	this.setLayout(new BorderLayout());   
        this.setSize(320, 280);   
        this.setVisible(true);
        paint();
    }
    */
    
    public void paint(Graphics g) {   
     	this.setLayout(new BorderLayout());   
        this.setSize(320, 280);   
        this.setVisible(true);
    	capture = new JButton("Gravar");   
        capture.addActionListener(this);   
  
        // This may differ check the jmf registry for   
        // correct entry   
        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(capture, BorderLayout.CENTER);   
        } catch (Exception e) {   
            e.printStackTrace();   
        }
        g.drawString("Welcome in Java Applet.",40,20);
    }   
  
    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   
        }   
    }   
  
    public Image getImagem(){   
    	return img;
    	/*
    	JFileChooser fileChooser = new JFileChooser();   
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        int resultado = fileChooser.showSaveDialog(this);   
        String caminho = ""+fileChooser.getSelectedFile();
        caminho += ".jpg";
        JOptionPane.showMessageDialog(null,caminho);
        try {   
            ImageIO.write((RenderedImage) imagem, "PNG", new File(caminho));   
        } catch (IOException e) {   
            JOptionPane.showMessageDialog(null, "não foi possivel encontrar " +   
                    "o dispositivo para a captura da imagem.");   
            e.printStackTrace();   
        }
        */   
    }   
}  

E a seguinte JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.applet.Applet"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Capturar Imagem</title>
</head>

<script type="text/javascript">

function defineValor(vlr){
	obj = document.getElementById("Operacao");
	obj.value = vlr;
	Camera.submit();
}
</script>

<body>
<form id="Camera" name ="Camera" action="VisitanteControle" method="post">
<input type="hidden" id="Operacao" name="Operacao">
	<APPLET ALIGN="CENTER" CODE="WebCamVisitante" WIDTH="800" HEIGHT="500">
	</APPLET>

	
</form>
</body>

</html>

O arquivo WebCamVisitante.class está na mesma pasta da JSP.

Quando eu rodo o APPLET sozinho, ele inicia a Camera e mostra a imagem.

Quando eu chamo pela JSP, a única coisa que aparece é o " g.drawString(“Welcome in Java Applet.”,40,20);" do método “paint”.

Pergunta: porque quando eu rodo a Applet sozinha, ele incia o JMF e exibe a imagem e pq quando rodo ela pela JSP, ele passa por todos os comandos e exibe apenas Welcome in Java Applet."?

Olá mvergani,

Cara eu acho que é pq vc precisa dar acesso a sua webcam. Assim qnd vc roda local a app tem acesso a sua webcam, agora qnd vc roda na jsp qqr um pode ser o client, imagina se vc tivesse acesso fácil a webcam do cara, ao HD, ao teclado, entendeu? Tente procurar na net um exemplo em flash q acesse a webcam, antes do acesso ele pergunta se tem permissão para acessa-lá.
Infelizmente não vou poder ajudar mto, mas procure algo sobre isso.

abss

Zabimaru, bom dia.

Agradeço sua resposta.

Em Flash eu consigo então? Vou dar uma pesquisada.

Eu tentei até em fazer de outra forma: esse sistema é de controle de condomínio. Essa função seria a de controle de visitante, onde na portaria cada visitante tira uma foto e preenche nome e rg. Na máquina do “porteiro”, rodaria um .RAR apenas dessa função porém, eu preciso fazer uma forma da tela web “esperar” que o JAR abra e quando tirar a foto, fechar o RAR e mandar a foto pro banco.