# dynamische Java Slideshow



## Bjoern78 (16. Dez 2009)

Hallo,

ich bin auf der Suche nach einer Java Slideshow ... Allerdings soll es etwas besonderes sein. Und zwar möchte ich die gern dynamisch halten, sprich, das Java Applet zeigt eine Slideshow (zufällige Wiedergabe) von Bildern die in einem definierten Verzeichnis liegen. Und wenn ich im laufenden Betrieb Bilder in das Verzeichnis hinzufüge dann sollen die mit in die Slideshow aufgenommen werden ohne dass das Applet neu geladen werden muss.

Kennt jemand eine Lösung für dieses Problem? Ich gebe zu, ich habe keine Ahnung von Java, weiss nur wie ich es einbinden kann in einem HTML Dokument, bin eher der PHP Programmierer. Aber damit lässt sich sowas nicht realisieren ... leider!


Viele Grüße aus dem Norden Deutschlands
Björn


----------



## madboy (16. Dez 2009)

Das ist mit einer "normalen" Java-Anwendung kein großes Problem. Von Applets habe ich keine Ahnung.
Was ist überhaupt die Frage? Willst du Hilfe beim Programmieren oder was Fertiges?


----------



## Bjoern78 (21. Dez 2009)

Ehrlich gesagt hätte ich schon ganz gern etwas fertiges, denn mir fehlt im Moment die Zeit mich so instensiv in Java einzuarbeiten ... Ich hab kein Problem damit ein Applet einzubinden oder es mit Parametern zu füttern, aber selber programmieren kann ich nix in Java :-(


----------



## madboy (22. Dez 2009)

Da bald Weihnachten ist, hier mal ein bisschen Code. Nur schnell hin geschrieben, tut aber was er soll 
Zwar kein Applet, aber das Prinzip sollte ähnlich/gleich sein.


```
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class RandomImageViewer {

   public static void main(String[] args) {
      if (args.length == 1) {
         new RandomImageViewer(args[0]);
      } else {
         System.err.println("Pfad zu Bilderverzeichnis angeben");
      }
   }

   public RandomImageViewer(String path) {
      ImageComponent comp = new ImageComponent();

      BufferedImage img;

      JFrame frame = new JFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(comp);
      frame.setSize(400, 400);
      frame.setVisible(true);

      while (true) {
         img = getRandomImage(path);
         if (img == null) {
            break;
         }
         comp.setImage(img);

         try {
            Thread.sleep(2000);
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
      }

   }

   private BufferedImage getRandomImage(String path) {
      Random rand = new Random();
      File[] files = new File(path).listFiles(new FilenameFilter() {

         @Override
         public boolean accept(File dir, String name) {
            return name.endsWith("jpg");
         }
      });

      int cntr = 0;
      BufferedImage img = null;
      do {
         try {
            File imageFile = files[rand.nextInt(files.length)];
            img = ImageIO.read(imageFile);
            System.out.println(imageFile.getAbsolutePath());
            return img;
         } catch (IOException e) {
            // ignore
         }
      } while (img == null && cntr++ < 10);

      System.err.println("Kein Bild zum Anzeigen gefunden. Abbruch.");
      return null;
   }

   class ImageComponent extends JComponent {
      private static final long serialVersionUID = 8055865896136562197L;

      private BufferedImage image;

      public void setImage(BufferedImage image) {
         this.image = image;
         setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
         repaint();
         invalidate();
      }

      @Override
      protected void paintComponent(Graphics g) {
         if (image != null) {
            g.drawImage(image, 0, 0, this);
         }
      }
   }

}
```


----------



## Spacerat (22. Dez 2009)

Das Bildverzeichnis soll doch mit Sicherheit auf dem Server vom Applet und nicht beim Applet-Clienten liegen. Das bedeutet, dass die Bilder vom Applet über eine URL geladen werden müssen. Diese kann ja immer dieselbe sein und deswegen würde ich die Bilder vom Server über PHP oder JSP auswählen. Hab' grad keine Zeit, um mir da Code aus den Ärmeln zu schütteln oder entsprechenden zu suchen. Den liefere ich bei Bedarf nach.


----------

