Problema com EventKey - JavaCV

0 respostas
mixelett

Oi! (Primeiro post aqui, xD)

Eu estou tentando fazer um programa que mostra um video usando JavaCV que fecha a janela (ou o vídeo) ao ser apertado a tecla ESC. Segue meu código:

import java.awt.event.ActionEvent;
import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.FrameGrabber;
import com.googlecode.javacv.cpp.opencv_core.*;
import com.googlecode.javacv.OpenCVFrameGrabber;
import java.awt.event.ActionListener;

import javax.swing.JDesktopPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class AbrirVideo extends JFrame {  

	public static void main(String[] args){
		
		JFrame window = new JFrame("JavaCV");
		final JDesktopPane desktop = new JDesktopPane();   
        JMenuBar myMenuBar = new JMenuBar();
        JMenu myMenuFile = new JMenu("File");
        JMenuItem openVideo = new JMenuItem("Open Video");
        myMenuBar.add(myMenuFile);
        myMenuFile.add(openVideo);
        JMenuItem exit = new JMenuItem("Exit");
        exit.addActionListener(new ActionListener() {
        	public void actionPerformed(ActionEvent e) {
        		System.exit(0);
        	}
        });
        
        myMenuFile.add(exit);
        
        openVideo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	String path = "";
           	 	JFileChooser file = new JFileChooser();
           	 	if(file.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) path = file.getSelectedFile().getAbsolutePath();
                CanvasFrame canvas = new CanvasFrame("Video Canvas"); 
                canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);   
                FrameGrabber grabber = new OpenCVFrameGrabber(path);  
                try {      
                	grabber.start();
                	IplImage img;
                	while(true){
                		img = grabber.grab();
                		canvas.setCanvasSize(grabber.getImageWidth(), grabber.getImageHeight());
                		if(img!=null){
                			canvas.showImage(img);
                			desktop.add(canvas);
                			canvas.waitKey(2);
                			if(canvas.waitKey(2).getKeyChar()==27) System.exit(0);
                		}
                	}
                }catch (Exception ae) {}
            }
        });
        window.add(desktop);
        window.setJMenuBar(myMenuBar);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(200, 100);
        window.setVisible(true);
	}
}

Mas quando aperto o ESC, nada acontece! E além disso, quando adiciono a linha: "if(canvas.waitKey(2).getKeyChar()==27) System.exit(0);", o vídeo não é transmitido, só fica parado (no primeiro quadro do vídeo). Alguém tem alguma ideia pra resolver esse problema?

Estou com um outro problema também: não consigo que o vídeo fique na janela interna ou no JDesktopPane criado, só consigo que ele seja exibido numa janela externa do próprio Canvas. Existe alguma maneira de o vídeo ser exibido dentro de algum JFrame?

Agradeço qualquer ajuda.
Até!
=]

Criado 21 de fevereiro de 2013
Respostas 0
Participantes 1