import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JPanel; import com.github.sarxos.webcam.Webcam; public class TakePicturesAndPlayExample { private static final class PlayerPanel extends JPanel { private static final long serialVersionUID = 1L; private final Vector<BufferedImage> images; private final Dimension size; private int offset = 0; public PlayerPanel(Vector<BufferedImage> images) { super(); this.images = images; this.size = new Dimension(images.get(0).getWidth(), images.get(0).getHeight()); setPreferredSize(size); } public void play() { Thread t = new Thread() { @Override public void run() { do { repaint(); try { Thread.sleep(100); } catch (InterruptedException e) { return; } } while (++offset < images.size()); } }; t.setDaemon(true); t.start(); } @Override protected void paintComponent(Graphics g) { g.setColor(Color.BLACK); g.fillRect(0, 0, getWidth(), getHeight()); g.drawImage(images.get(offset), 0, 0, null); } } public static void main(String[] args) { Webcam w = Webcam.getDefault(); w.open(true); Vector<BufferedImage> images = new Vector<BufferedImage>(); System.out.println("recording, please wait"); for (int i = 0; i < 100; i++) { images.add(w.getImage()); try { Thread.sleep(100); } catch (InterruptedException e) { return; } } w.close(); System.out.println("play"); PlayerPanel panel = new PlayerPanel(images); JFrame f = new JFrame("Take pictures and play example"); f.add(panel); f.pack(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); panel.play(); try { Thread.sleep(100 * images.size()); } catch (InterruptedException e) { return; } } }