Para a execução de uma classe

6 respostas
Willdoidao

Tenho um sistema que capta as imagens de uma camera atras do JMF, chamei a classe de CapImagem, mas preciso que se um determinado botão seja precionado essa classe para de ser executada. Como posso fazer isso???

6 Respostas

nel

Bom dia.

Um simples return não resolveria sua vida? Caso a classe seja um void, basta dar return;

Abraços.

Willdoidao

Cara pensei nisso mas nw dá olha como foi criado:

public class CapImagem extends Panel implements ActionListener {

    public static Player player = null;
    public CaptureDeviceInfo di = null;
    public MediaLocator ml = null;
    public JButton capture = null;
    public Buffer buf = null;
    public Image img = null;
    public VideoFormat vf = null;
    public BufferToImage btoi = null;
    public ImagePanel imgpanel = null;

public  CapImagem(int w,int h,int x, int y)
 {
    setLayout(new BorderLayout());
    setLocation(x,y);
    setSize(w,h);

	    imgpanel = new ImagePanel();
            capture = new JButton("Capture");
	    capture.addActionListener(this);

	    String str1 = "vfw:Logitech USB Video Camera:0";
	    String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
	    di = CaptureDeviceManager.getDevice(str2);
	    ml = di.getLocator();

	    try
	    {
	      player = Manager.createRealizedPlayer(ml);
	      player.start();
	      Component comp;

	      if ((comp = player.getVisualComponent()) != null)
	      {
	        add(comp,BorderLayout.NORTH);
	      }
	      add(capture,BorderLayout.CENTER);
	      add(imgpanel,BorderLayout.SOUTH);
	    }
	    catch (Exception e)
	    {
	      e.printStackTrace();
	    }
	  }



	  public static void main(String[] args)
	  {
	    Frame f = new Frame("SwingCapture");
	    //CapImagem cf = new CapImagem();

    f.addWindowListener(new WindowAdapter() {
	      public void windowClosing(WindowEvent e) {
	      playerclose();
	      System.exit(0);}});

	    //f.add("Center",cf);
	    f.pack();
	    f.setSize(new Dimension(320,550));
	    f.setVisible(true);
	  }


	  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
	      imgpanel.setImage(img);

	      // save image
	      saveJPG(img,"c:\test.jpg");
	    }
	  }

	  class ImagePanel extends Panel
	  {
	    public Image myimg = null;

	    public ImagePanel()
	    {
	      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);
	      }
	    }
	  }


	  public static void saveJPG(Image img, String s)
	  {
	    BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
	    Graphics2D g2 = bi.createGraphics();
	    g2.drawImage(img, null, null);

	    FileOutputStream out = null;
	    try
	    {
	      out = new FileOutputStream(s);
	    }
	    catch (java.io.FileNotFoundException io)
	    {
	      System.out.println("File Not Found");
	    }

	    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
	    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
	    param.setQuality(0.5f,false);
	    encoder.setJPEGEncodeParam(param);

	    try
	    {
	      encoder.encode(bi);
	      out.close();
	    }
	    catch (java.io.IOException io)
	    {
	      System.out.println("IOException");
	    }
	  }
}

Alguma outra sugestão!?!?

Metal_Java_Full
<blockquote><div class="quote-author">Willdoidao:</div>

public static Player player = null;

public CaptureDeviceInfo di = null;

public MediaLocator ml = null;

public JButton capture = null;

public Buffer buf = null;

public Image img = null;

public VideoFormat vf = null;

public BufferToImage btoi = null;

public ImagePanel imgpanel = null;

[/code]</blockquote>

Pq essas inicializaçoes nulas??!

Dexa tudo default mesmo!!
thundercas
<blockquote><div class="quote-author">Metal Java Full:</div><blockquote><div class="quote-author">Willdoidao:</div>

public static Player player = null;

public CaptureDeviceInfo di = null;

public MediaLocator ml = null;

public JButton capture = null;

public Buffer buf = null;

public Image img = null;

public VideoFormat vf = null;

public BufferToImage btoi = null;

public ImagePanel imgpanel = null;

[/code]</blockquote>

Pq essas inicializaçoes nulas??!

Dexa tudo default mesmo!!</blockquote>

Pelo que sei este procedimento é de boa prática, pois ele declara todas as variáveis no início de forma Global, no entanto, como não as inicializa, esta evitando consumo de memória…

Como vc implementa esta classe no seu sistema?? Ela é chamada toda vez em que ocorre algum evento que você pode interceptar, certo?? Não seria possível criar uma variável tipo boolean que, quando vc clicasse neste tal botão ela ficasse FALSE?? Daí vc faria esta validação dentro do método que trata o tal evento… abs

Willdoidao

chamo ela apena uma vez para mostrar a imagem eum um frame da seguinte maneira:

Para chamar ela em outra tela uso o seguinte:

CapImagem t = new CapImagem(Visor.getWidth() - 7, Visor.getHeight() - 7, 4, 4); Visor.add(t);

Como fazer o o false pq já tentei fazer isso mas a execução continua, alguma ideia ou sugestão ou até um exemplo de como fazer???

nel

Adiciona mais um atributo do tipo boolean ao seu método. Quando chamar a primeira vez o seu método passe um true e quando clicar no botão que deseja que encerre passe um parametro false. No seu método você faz uma verificação, quando for true você executa o código caso contrário (quando for false) você não executa, simples dá um return;

Caso o seu método retorne algum valor dê um return null; e verifica no código onde a chama para o seu método é efetuada e faça o tratamento necessário, para não ocorrer um NullPointerException. É uma ideia.

Abraços.

Criado 9 de dezembro de 2009
Ultima resposta 9 de dez. de 2009
Respostas 6
Participantes 4