Boas gente, Sou novo no Fórum e estou precisando de uma ajudinha
Seguinte… Tenho uma aplicação que carrega a webcam usando o JMF em um JPopupMenu numa janela de Cadastro, até ai tudo bem, consigo adquirir a imagem e capturar uma foto, quando eu fecho o popup e abro novamente tudo funciona normal, mais quando eu tiro o foco da janela de cadastro para qualquer outra e tento abrir novamente o popup, ele abre, mais sem a imagem da webcam :? fica uma imagem toda preta e tb não captura mais foto
Segue parte do código:
jBFoto = new JButton();
jPanel2.add(jBFoto);
jBFoto.setIcon(new javax.swing.ImageIcon("C:/Fenix/Imagens/photo18x18.PNG"));
jBFoto.setBounds(448, 124, 21, 20);
jBFoto.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
int x = jBFoto.getWidth()
- (int) jPopFoto.getPreferredSize().getWidth();
int y = jBFoto.getHeight();
jPopFoto.show(jBFoto, x, y);
pnGeral.add(getCapturaFoto1(), BorderLayout.CENTER);
}
});
{
jPopFoto = new JPopupMenu();
setComponentPopupMenu(jBFoto, jPopFoto);
{
jPweb = new JPanel();
BorderLayout jPanel1Layout = new BorderLayout();
jPweb.setLayout(jPanel1Layout);
jPopFoto.add(jPweb);
jPweb.setPreferredSize(new Dimension(327, 20));
{
JButton btnFechar = new JButton();
jPweb.add(btnFechar, BorderLayout.EAST);
btnFechar.setIcon(new javax.swing.ImageIcon("C:/Fenix/Imagens/close16x16.PNG"));
btnFechar.setPreferredSize(new Dimension(21, 20));
btnFechar.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jPopFoto.setVisible(false);
}
});
}
{
JLabel lblTop = new JLabel("Sistema Fenix - Capturar Imagem");
jPweb.add(lblTop, BorderLayout.CENTER);
}
}
{
pnGeral = new JPanel();
BorderLayout pnGeralLayout = new BorderLayout();
pnGeral.setLayout(pnGeralLayout);
jPopFoto.add(pnGeral);
pnGeral.setPreferredSize(new Dimension(350, 267));
}
}
Segue o Metodo getCapturaFoto1():
private CapturaFoto getCapturaFoto1() {
if (capturaFoto1 == null) {
capturaFoto1 = new CapturaFoto();
capturaFoto1.setBounds(new java.awt.Rectangle(0, 0, 327, 296));
capturaFoto1.setPreferredSize(new java.awt.Dimension(327, 296));
}
return capturaFoto1;
}
Classe CapturaFoto:
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.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class CapturaFoto extends JPanel {
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 static final long serialVersionUID = 1L;
private JButton captura = null;
public CapturaFoto(JLabel lblFoto, String codigo) {
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:\\Fenix\\Fotos\\00.JPG";
try {
ImageIO.write((RenderedImage) imagem, "jpg", new File(caminho));
} catch (IOException e) {
e.printStackTrace();
}
}
private JButton getCaptura() {
if (captura == null) {
captura = new JButton("Captura");
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);
}
}
}
}
Help pliz