Hallo,
ich versuche mehrere Bilder nacheinander in einem JFrame darzustellen, damit es am Ende wie ein Video aussieht.
Dafür habe ich mir folgende Klasse geschrieben:
Wenn der VideoStreamHandler gestartet wird, soll das Bild src/img/waiting_for_picture.jpeg angezeigt werden. Sobald ein Element in pendingImages vorhanden ist, soll das Bild geupdated werden.
Leider sehe ich immer nur das Ladebild, sowie das erste Bild, das ich in Lade. Die nächsten werden nicht angezeigt.
Falls es eine bessere Lösung zum Anzeigen als Video gibt, gerne her damit, kenne mich mit Swing noch nicht wirklich aus.
Sonst meine Frage: Warum werden die Bilder danach nicht mehr angezeigt?
Vielen Dank!
ich versuche mehrere Bilder nacheinander in einem JFrame darzustellen, damit es am Ende wie ein Video aussieht.
Dafür habe ich mir folgende Klasse geschrieben:
Java:
private static class VideoStreamHandler implements Runnable{
private JFrame streamWindow;
private JLabel jLabel;
protected ArrayList<BufferedImage> pendingImages = new ArrayList<>();
public VideoStreamHandler(){
}
@Override
public void run() {
createWindow();
streamWindow.setVisible(true);
while (true){
if (pendingImages.size() > 0) {
updateImage(pendingImages.remove(0));
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// don't care at first
}
}
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void createWindow(){
Dimension d = new Dimension();
streamWindow = new JFrame("TabletConnect - View");
streamWindow.setVisible(true);
streamWindow.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
String filename = "src/img/waiting_for_picture.jpeg";
try{
BufferedImage image = ImageIO.read(new File(filename));
jLabel = new JLabel(new ImageIcon(image));
streamWindow.getContentPane().add(jLabel);
streamWindow.pack();
} catch (Exception e){
e.printStackTrace();
}
}
private void updateImage(BufferedImage img){
jLabel.setIcon(new ImageIcon(img));
jLabel.repaint();
}
}
Wenn der VideoStreamHandler gestartet wird, soll das Bild src/img/waiting_for_picture.jpeg angezeigt werden. Sobald ein Element in pendingImages vorhanden ist, soll das Bild geupdated werden.
Leider sehe ich immer nur das Ladebild, sowie das erste Bild, das ich in Lade. Die nächsten werden nicht angezeigt.
Falls es eine bessere Lösung zum Anzeigen als Video gibt, gerne her damit, kenne mich mit Swing noch nicht wirklich aus.
Sonst meine Frage: Warum werden die Bilder danach nicht mehr angezeigt?
Vielen Dank!