WebCam + JPopupMenu [RESOLVIDO]

Boas gente, Sou novo no Fórum e estou precisando de uma ajudinha :wink:

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 :cry:

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 :frowning:

Conseguir resolver^^ Obrigado a todos :lol: