どんなUIでも使用できるCanvasFrameの代替品を探していましたが、今はそれを持っています. これが、ライブ (または静止) 画像を表示できるスイング要素です。
import java.awt.Graphics;
import java.awt.image.*;
import javax.swing.JPanel;
public class CamImagePanel extends JPanel {
private BufferedImage image;
public CamImagePanel() {
super();
// Note that at this point, image = null
// so be sure to call setImage() before setVisible(true)
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (image != null) // Not efficient, but safer.
g.drawImage(image, 0, 0, this);
}
public void setImage(BufferedImage img) {
image = img;
repaint();
}
}
次に、1 秒あたり 20 ~ 30 回 (30 ~ 50 ミリ秒) ウェイクアップするようにメイン イベント スレッドにタイマーを設定し、アラーム コールバック メソッドで mypanel.setImage(latestPhoto); を呼び出すだけです。まるでライブ映像のようです。
カメラからの画像でバッファをできるだけ速く埋める独自のスレッドを持つコントローラーオブジェクトがあり、コントローラーに最新の画像を要求するだけです。この方法では、同期は必要ありません。実際に、カメラが作成できるよりも速くまたは遅く画像を要求することができ、私のロジックは引き続き正常に機能します。
UI のボタンでタイマーが停止し、最終的な画像をパネルに残したままにするか、setVisible(false) を使用してパネルを完全にダウンさせることができます。