No meu caso,eu uso JSF e a captura está funcionando perfeitamente,no entanto o código só executa na máquina “servidora”,ou seja,se um “cliente” apertar o botão de ‘Capturar’, o frame é renderizado na máquina do servidor,não na do cliente.Como eu posso contornar isso?
Mas não creio que o problema esteja aqui,pois a funcionalidade está ok;abre o frame e salva a foto no lugar correto.
Acredito que o problema está mais relacionado a politica de segurança,sandbox etc.
A
alissonvla
entao cara,
nao é assim nao, vc deve usar applet, da uma olhada na google como utilizar applet.
e vc vai ter q ver como enviar essa foto capturada no cliente e mandar para o servidor.
t+
R
raf4ever
Alisson,tentei fazer com applet mas ele nem abre o applet no browser,ele pára na linha que instancia o ImagePanel e não acontece mais nada e nem dá erro algum.
Creio que é preciso assinar esse applet,será isso?
packagecamera;importjava.applet.Applet;importjava.awt.BorderLayout;importjava.awt.Component;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.Panel;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.image.RenderedImage;importjava.io.File;importjava.io.IOException;importjavax.imageio.ImageIO;importjavax.media.Buffer;importjavax.media.CaptureDeviceInfo;importjavax.media.Manager;importjavax.media.MediaLocator;importjavax.media.Player;importjavax.media.cdm.CaptureDeviceManager;importjavax.media.control.FrameGrabbingControl;importjavax.media.format.VideoFormat;importjavax.media.util.BufferToImage;importjavax.swing.JButton;importjavax.swing.JComponent;importjavax.swing.JOptionPane;publicclassWebCamCaptureextendsAppletimplementsActionListener{privatestaticfinallongserialVersionUID=1L;publicstaticPlayerplayer=null;publicCaptureDeviceInfodi=null;// @jve:decl-index=0: publicMediaLocatorml=null;// @jve:decl-index=0: publicJButtoncapture=null;publicBufferbuf=null;publicImageimg=null;publicVideoFormatvf=null;publicBufferToImagebtoi=null;publicImagePanelimgpanel=null;publicvoidinit(){try{//JOptionPane.showMessageDialog(null, "inicializou"); this.setLayout(newBorderLayout());this.setSize(220,220);this.setVisible(true);imgpanel=newImagePanel();capture=newJButton("Capturar Foto");capture.addActionListener(this);// This may differ check the jmf registry for // correct entry Stringstr2="vfw://0";di=CaptureDeviceManager.getDevice(str2);ml=newMediaLocator("vfw://0");JOptionPane.showMessageDialog(null,"executou di e ml");player=Manager.createRealizedPlayer(ml);player.start();Componentcomp;if((comp=player.getVisualComponent())!=null){add(comp,BorderLayout.NORTH);}add(capture,BorderLayout.CENTER);//add(imgpanel, BorderLayout.SOUTH); }catch(Exceptione){e.printStackTrace();}}publicvoidpaint(Graphicsg){}publicstaticvoidplayerclose(){player.close();player.deallocate();}publicvoidactionPerformed(ActionEvente){JComponentc=(JComponent)e.getSource();if(c==capture){// Grab a frame FrameGrabbingControlfgc=(FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");buf=fgc.grabFrame();// Convert it to an image btoi=newBufferToImage((VideoFormat)buf.getFormat());img=btoi.createImage(buf);// show the image imgpanel.setImage(img);gravaImg(img);}}publicvoidgravaImg(Imageimagem){Stringcaminho="C:\\teste.jpg";try{ImageIO.write((RenderedImage)imagem,"JPG",newFile(caminho));}catch(IOExceptione){JOptionPane.showMessageDialog(null,"não foi possivel encontrar "+"o dispositivo para a captura da imagem.");e.printStackTrace();}}classImagePanelextendsPanel{privatestaticfinallongserialVersionUID=1L;publicImagemyimg=null;publicImagePanel(){JOptionPane.showMessageDialog(null,"setando a classe");setLayout(null);setSize(120,120);}publicvoidsetImage(Imageimg){this.myimg=img;repaint();}publicvoidpaint(Graphicsg){if(myimg!=null){g.drawImage(myimg,0,0,this);}}}}
Se assim funcionou,pq dentro do meu projeto não rolou?
A
alissonvla
cara,
eu so usei applet da forma que no final do link q eu te passei, dessa ai q vc ta usando, eu nunca fiz nao.
t+
R
raf4ever
alissonvla:
cara,
eu so usei applet da forma que no final do link q eu te passei, dessa ai q vc ta usando, eu nunca fiz nao.
t+
Conseguiu assinar o applet direitinho?
A
alissonvla
entao cara,
eu fiz so um de teste msm e funcinou, vc vai ter que comprar um certificado digital para assina-lo
t+
R
raf4ever
alissonvla:
entao cara,
vc vai ter que comprar um certificado digital para assina-lo
t+
Tem certeza?Acho q n é preciso não.
A
alissonvla
cara,
para vc testar nao precisa, entao vai ficar aparecendo aquela tela do java no browser, pedindo autorização, pq o certicado é desconhecido e para vc tirar essa tela, vc vai ter que comprar um.