com.github.sarxos.webcam.WebcamViewer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of webcam-capture Show documentation
Show all versions of webcam-capture Show documentation
This library allows you to use your PC webcam, IP or network cameras directly from Java. It's compatible with most operating systems (Windows, Linux, MacOS).
The newest version!
package com.github.sarxos.webcam;
import java.awt.BorderLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.lang.Thread.UncaughtExceptionHandler;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Just a simple webcam viewer.
*
* @author Bartosz Firyn (SarXos)
*/
public class WebcamViewer extends JFrame implements Runnable, WebcamListener, WindowListener, UncaughtExceptionHandler, ItemListener {
private static final long serialVersionUID = 1L;
private static final Logger LOG = LoggerFactory.getLogger(WebcamViewer.class);
private Webcam webcam = null;
private WebcamPanel panel = null;
private WebcamPicker picker = null;
public WebcamViewer() {
SwingUtilities.invokeLater(this);
}
@Override
public void run() {
setTitle("Webcam Capture Viewer");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
addWindowListener(this);
picker = new WebcamPicker();
picker.addItemListener(this);
webcam = picker.getSelectedWebcam();
if (webcam == null) {
LOG.error("No webcams found");
System.exit(1);
}
webcam.setViewSize(WebcamResolution.VGA.getSize());
webcam.addWebcamListener(WebcamViewer.this);
panel = new WebcamPanel(webcam, false);
panel.setFPSDisplayed(true);
add(picker, BorderLayout.NORTH);
add(panel, BorderLayout.CENTER);
pack();
setVisible(true);
Thread t = new Thread() {
@Override
public void run() {
panel.start();
}
};
t.setName("webcam-viewer-starter");
t.setDaemon(true);
t.setUncaughtExceptionHandler(this);
t.start();
}
@Override
public void webcamOpen(WebcamEvent we) {
LOG.info("Webcam open");
}
@Override
public void webcamClosed(WebcamEvent we) {
LOG.info("Webcam closed");
}
@Override
public void webcamDisposed(WebcamEvent we) {
LOG.info("Webcam disposed");
}
@Override
public void webcamImageObtained(WebcamEvent we) {
// do nothing
}
@Override
public void windowActivated(WindowEvent e) {
}
@Override
public void windowClosed(WindowEvent e) {
webcam.close();
}
@Override
public void windowClosing(WindowEvent e) {
}
@Override
public void windowOpened(WindowEvent e) {
}
@Override
public void windowDeactivated(WindowEvent e) {
}
@Override
public void windowDeiconified(WindowEvent e) {
LOG.info("Webcam viewer resumed");
panel.resume();
}
@Override
public void windowIconified(WindowEvent e) {
LOG.info("Webcam viewer paused");
panel.pause();
}
@Override
public void uncaughtException(Thread t, Throwable e) {
e.printStackTrace();
LOG.error(String.format("Exception in thread %s", t.getName()), e);
}
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getItem() == webcam) {
return;
}
if (webcam == null) {
return;
}
final WebcamPanel tmp = panel;
remove(panel);
webcam.removeWebcamListener(this);
webcam = (Webcam) e.getItem();
webcam.setViewSize(WebcamResolution.VGA.getSize());
webcam.addWebcamListener(this);
System.out.println("selected " + webcam.getName());
panel = new WebcamPanel(webcam, false);
add(panel, BorderLayout.CENTER);
Thread t = new Thread() {
@Override
public void run() {
tmp.stop();
panel.start();
}
};
t.setDaemon(true);
t.setUncaughtExceptionHandler(this);
t.start();
}
}