Animation startet nicht/ Thread

Status
Nicht offen für weitere Antworten.

Haslicher

Mitglied
Hallo

habe ein Programm das aus Dateien eine Animation machen soll der Thread soll via Button gestartet werden doch das geschieht nicht habe das public void run nun so gestartet aber es passiert nichts. Woran liegt das?
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.lang.*;
import java.util.*;
import java.net.*;
// Autor: Benedikt Peichel
// Datum: 29.09.2005

public class Playback extends JFrame implements Runnable  {
  // Anfang Variablen
  private JMenuBar menu = new JMenuBar();
  private JMenu datei = new JMenu("Datei");
  private JMenuItem DateiJMenuItem1 = new JMenuItem("Öffnen");
  private JMenuItem DateiJMenuItem2 = new JMenuItem("Schließen");

  JFileChooser openfile = new JFileChooser();
  private JPanel el1 = new JPanel(null);
    private JButton play = new JButton();
    private JButton stop = new JButton();
    private JButton pause = new JButton();
    private JPanel Panel = new JPanel();
    private JPanel geschPanel = new JPanel();
  private ButtonGroup gesch = new ButtonGroup();
    private JRadioButton jButtonGroup1ButtonLangsam = new JRadioButton("Langsam");
    private JRadioButton jButtonGroup1ButtonMittel = new JRadioButton("Mittel");
    private JRadioButton jButtonGroup1ButtonSchnell = new JRadioButton("Schnell");

    String pfad;
    String bild;
    
  Zeichnen malen = new Zeichnen();
  Image[] arImg;
  
  Container cp = getContentPane();

  Thread th;
  int actImg = -1;
  // Ende Variablen

  public Playback(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    int frameWidth = 765;
    int frameHeight = 488;
    setSize(frameWidth, frameHeight);
    setLocation(120, 140);
    //Container cp = getContentPane();
    cp.setLayout(new BorderLayout());

    // Anfang Komponenten
    malen.setBounds(128, 8, 768, 1024);
    cp.add(malen);

    setJMenuBar(menu);
    menu.add(datei);
    DateiJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        DateiJMenuItem1ActionPerformed(evt); } });
    datei.add(DateiJMenuItem1);
    datei.addSeparator();
    DateiJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        DateiJMenuItem2ActionPerformed(evt); } });
    datei.add(DateiJMenuItem2);



    el1.setBounds(0, 0, 121, 177);
    el1.setFont (new Font("MS Sans Serif", Font.PLAIN, 12));
    cp.add(el1);
    play.setBounds(8, 8, 43, 25);
    play.setText("");
    play.setIcon(new ImageIcon("images/Play24.gif"));
    el1.add(play);
    play.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        playActionPerformed(evt);
      }
    });
    play.setEnabled(false);
    stop.setBounds(32, 40, 43, 25);
    stop.setIcon(new ImageIcon("images/Stop24.gif"));
    stop.setText("");
    el1.add(stop);
    stop.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        stopActionPerformed(evt);
      }
    });
    stop.setEnabled(false);
    pause.setBounds(56, 72, 43, 25);
    pause.setIcon(new ImageIcon("images/Pause24.gif"));
    pause.setText("");
    el1.add(pause);
    pause.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        pauseActionPerformed(evt);
      }
    });
    pause.setEnabled(false);

    geschPanel.setBounds(8, 104, 97, 57);
    geschPanel.setLayout(new GridLayout(3, 1));
    gesch.add(jButtonGroup1ButtonLangsam);
    geschPanel.add(jButtonGroup1ButtonLangsam);
    gesch.add(jButtonGroup1ButtonMittel);
    geschPanel.add(jButtonGroup1ButtonMittel);
    gesch.add(jButtonGroup1ButtonSchnell);
    geschPanel.add(jButtonGroup1ButtonSchnell);
    el1.add(geschPanel);
    jButtonGroup1ButtonMittel.setSelected(true);
    


   // Ende Komponenten

    setVisible(true);
  }

  // Anfang Ereignisprozeduren                                [color=red]// erst ab hier ist es wichtig[/color]
  public void DateiJMenuItem1ActionPerformed(ActionEvent evt) { //Öffnen
    openfile.setDialogTitle("Datei wählen ...");
    //openfile.setCurrentDirectory(new File("c:/"));
    if (openfile.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
      pfad = openfile.getSelectedFile().getPath();
      play.setEnabled(true);
      pause.setEnabled(true);
      stop.setEnabled(true);

      th = new Thread();

    }
  }
  public void DateiJMenuItem2ActionPerformed(ActionEvent evt) { //Schließen
    System.exit(1);
  }
  public void playActionPerformed(ActionEvent evt) {
    th.start();                                              [color=red]//geht nicht wieso weiss ich nicht darum ist das run() da[/color]
    run();
  }
  public void stopActionPerformed(ActionEvent evt) {

  }
  public void pauseActionPerformed(ActionEvent evt) {

  }
  public void run(){
    int zeilen = 0;
    try{
      BufferedReader in = new BufferedReader(new FileReader(pfad));
      while ( in.readLine() != null ) {
        zeilen = zeilen + 1;
      }
      in.close();
    } catch (Exception e){

    }
    //Bilder laden
    arImg = new Image[zeilen];
    MediaTracker mt = new MediaTracker(this);
    Toolkit tk = getToolkit();
    try{
      BufferedReader in = new BufferedReader(new FileReader(pfad));
      for(int i = 0; i <= zeilen; i++){
        arImg[i] = tk.getImage(in.readLine());
        System.out.println("add "+i);
        mt.addImage(arImg[i], 0);
        mt.waitForAll();
      }
      in.close();
    }catch(Exception e){

    }
    //Animation
    actImg = 0;
    while(true){
      repaint();
      actImg = (actImg + 1) ;
      try{
        Thread.sleep(500);
      }catch(Exception e){

      }
    }



  }
  public class Zeichnen extends Canvas{
    public void paint (Graphics g){
      if(actImg == -1){                //Passiert beim Start
        Image img = getToolkit().getImage("images/willkommen.jpg");
        MediaTracker mt = new MediaTracker(this);
        mt.addImage(img, 0);
        try{
          mt.waitForAll();
        }catch(InterruptedException e){
          System.out.println(e);
        }
        g.drawImage(img ,1,1, this);
      }
      else{                          //Passiert beim Öffnen
        g.drawImage(arImg[actImg] ,1,1, this);
      }


    }
  }
  // Ende Ereignisprozeduren

  public static void main(String[] args) {
    new Playback("Playback");
  }
}

Wie kann ich es machen wenn ein Bild fehlt die in der Datei, da ist eine Liste mit Bilder, steht oder sie kaputt ist? Danke

Benedikt
 
Anstelle von "th = new Thread()" solltest du "th = new Thread( this )" benutzen. Der Thread muss ja wissen, bei wem er "run" aufrufen soll.

P.S. und ruf in den "catch"-es mal "e.printStackTrace()" auf, damit du andere Fehler findest.
 
Habe das nun gemacht aber Bilder sieht man keine wechseln nur wenn ich das Fenster verschiebe erscheint das neue Bild.
 
Habe das gleiche Problem bei der Software die dazu kommen soll, sie soll Bilder eine Webcam holen und speichern. Das klapt wunderbar nur das Aktuelle Bild wieder geben funkt nicht ganz so wie ich es will. Darum suche ich jemanden der mich hier Unterstützt und hilft. Desweiteren möchte ich noch ein Programm schreiben welches die Bilder nimmt und zu einem Film zusammen macht evt. AVI oder MPEG aber da habe ich gar keine Ahnung davon doch das ist noch weit weg.

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.lang.*;
import java.util.*;
import java.net.*;


// Autor: Benedikt Peichel
// Datum: 04.09.2005

public class WebcamCapture extends JFrame {
  // Anfang Variablen
  private JLabel jLabel1 = new JLabel();
  private JLabel ur = new JLabel();
  private JLabel lin = new JLabel();
  private JTextField server = new JTextField();
  private JTextField file = new JTextField();
  private JLabel link = new JLabel();
  private JLabel sta = new JLabel();
  private JLabel jLabel2 = new JLabel();
  private JTextField intervall = new JTextField();
  private JLabel jLabel3 = new JLabel();
  private JTextField zielpfad = new JTextField();
  private JLabel jLabel4 = new JLabel();
  private JTextField session = new JTextField();
  private JButton start = new JButton();
  private JButton playback = new JButton();
  private JButton stop = new JButton();
  
  Thread los;
  private JLabel status = new JLabel();
  private JPanel jPanel1 = new JPanel(null);
  String name;
  Frame window;
  Image img = getToolkit().getImage("test.jpg");;
  // Ende Variablen

  public WebcamCapture(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); } });
    int frameWidth = 465;
    int frameHeight = 280;
    setResizable(false);
    setSize(frameWidth, frameHeight);
    Container cp = getContentPane();
    cp.setLayout(new BorderLayout());

    // Anfang Komponenten
    jLabel1.setBounds(8, 16, 129, 20);
    jLabel1.setFont (new Font("MS Sans Serif", Font.BOLD, 16));
    jLabel1.setText("URS (Server):");
    cp.add(jLabel1);
    ur.setBounds(8, 40, 88, 20);
    ur.setFont (new Font("MS Sans Serif", Font.BOLD, 16));
    ur.setText("URL (File):");
    cp.add(ur);
    lin.setBounds(8, 64, 92, 20);
    lin.setFont (new Font("MS Sans Serif", Font.BOLD, 16));
    lin.setText("URL (Link):");
    cp.add(lin);
    server.setBounds(144, 16, 305, 21);
    server.setBackground(Color.WHITE);
    server.setText("http://neubau.informatik.uni-stuttgart.de/neubau.jpg");
    server.addKeyListener(new KeyAdapter() {
           public void keyReleased(KeyEvent e)
           {
              links();
           }
        });
    
    cp.add(server);
    file.setBounds(144, 40, 305, 21);
    file.setBackground(Color.WHITE);
    file.setText("");
    file.addKeyListener(new KeyAdapter() {
           public void keyReleased(KeyEvent e)
           {
             links();
           }
        });
    
    cp.add(file);
    link.setBounds(144, 65, 308, 21);
    link.setFont (new Font("MS Sans Serif", Font.PLAIN, 12));
    link.setText("");              //http:///
    cp.add(link);
    sta.setBounds(8, 96, 59, 20);
    sta.setFont (new Font("MS Sans Serif", Font.BOLD, 16));
    sta.setText("Status:");
    cp.add(sta);
    jLabel2.setBounds(8, 128, 118, 20);
    jLabel2.setFont (new Font("MS Sans Serif", Font.BOLD, 16));
    jLabel2.setText("Intervall (sec):");
    cp.add(jLabel2);
    intervall.setBounds(144, 128, 305, 21);
    intervall.setBackground(Color.WHITE);
    intervall.setText("30");
    cp.add(intervall);
    jLabel3.setBounds(8, 152, 123, 20);
    jLabel3.setFont (new Font("MS Sans Serif", Font.BOLD, 16));
    jLabel3.setText("Lokaler Pfad:");
    cp.add(jLabel3);
    zielpfad.setBounds(144, 152, 305, 21);
    zielpfad.setBackground(Color.WHITE);
    zielpfad.setText("c:/temp/neu");
    cp.add(zielpfad);
    jLabel4.setBounds(8, 176, 70, 20);
    jLabel4.setFont (new Font("MS Sans Serif", Font.BOLD, 16));
    jLabel4.setText("Session:");
    cp.add(jLabel4);
    session.setBounds(144, 176, 305, 21);
    session.setBackground(Color.WHITE);
    session.setText("Mysession");
    cp.add(session);
    start.setBounds(320, 208, 131, 41);
    start.setFont (new Font("MS Sans Serif", Font.BOLD, 18));
    start.setText("Start");
    cp.add(start);
    start.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        startActionPerformed(evt); } });

    playback.setBounds(8, 208, 131, 41);
    playback.setFont (new Font("MS Sans Serif", Font.BOLD, 18));
    playback.setText("Playback");
    cp.add(playback);
    playback.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        playbackActionPerformed(evt); } });

    stop.setBounds(320, 208, 131, 41);
    stop.setFont (new Font("MS Sans Serif", Font.BOLD, 18));
    stop.setText("Stop");
    cp.add(stop);
    stop.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        stopActionPerformed(evt); } });
    stop.setVisible(false);

    status.setBounds(145, 104, 302, 13);
    status.setFont (new Font("MS Sans Serif", Font.PLAIN, 12));
    cp.add(status);
    jPanel1.setBounds(176, 208, 49, 17);
    cp.add(jPanel1);
    // Ende Komponenten

    setVisible(true);
  }

  // Anfang Ereignisprozeduren
  public void links(){
        String url1 = server.getText();
        String url2 = file.getText();

        link.setText(url1+""+url2);
  }
  public void startActionPerformed(ActionEvent evt) {
    los = new Thread(){
      public void run(){
        server.setEnabled(false);
        file.setEnabled(false);
        intervall.setEnabled(false);
        zielpfad.setEnabled(false);
        session.setEnabled(false);
        start.setVisible(false);
        stop.setVisible(true);
        
        //werteholen
        String url1 = server.getText();
        String url2 = file.getText();

        int zeit = Integer.parseInt(intervall.getText());
        zeit = zeit * 1000;

        String outpfad = zielpfad.getText();
        String mysession = session.getText();

        int bilder = 0;

        try{
          new java.io.File(outpfad).mkdir();
        }catch(Exception e){

        }
        //aktuelle ansicht starten
        fenster();
        
        //endlosschleife mit sleep
        for( ; ; ){
          try{
            Date d = new Date();
            String datum = (d.getYear()+1900)+"-"+(d.getMonth()+1)+"-"+(d.getDate())+" "+d.getHours()+"."+d.getMinutes()+"."+d.getSeconds();
          
            BufferedWriter out1 = new BufferedWriter(new FileWriter(outpfad+"/"+mysession+".dat", true));
            BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outpfad+"/"+datum+".jpg"));
            BufferedInputStream in = new BufferedInputStream((new URL(url1+""+url2).openStream()));

            status.setText("Download...");

            int i;
            while((i=in.read()) != -1){
              out.write(i);
            }
            out1.write(outpfad+"/"+datum+".jpg");
            out1.newLine();

           out.close();
           out1.close();
           in.close();
    
           bilder = bilder + 1;
           Thread.sleep(50);
           img = getToolkit().getImage(outpfad+"/"+datum+".jpg");
           /*MediaTracker mt1 = new MediaTracker(this);
           mt1.addImage(img, 0);
           try{
             mt1.waitForAll();
           }catch(InterruptedException e){
             System.out.println(e);
            }              //  */

           repaint();
           
           status.setText("Warten ("+(zeit/1000)+" Sek, "+bilder+" Bilder "+datum+".jpg)...");
           Thread.sleep(zeit);

          }catch(Exception e){

          }
        }
      }
    };
    los.start();
  }
  public void playbackActionPerformed(ActionEvent evt) {
    try{
      Process p = Runtime.getRuntime().exec("Playback.bat");
    }catch(Exception e){

    }
    //System.exit(1);
  }
  public void stopActionPerformed(ActionEvent evt) {
    start.setVisible(true);
    stop.setVisible(false);
    server.setEnabled(true);
    file.setEnabled(true);
    intervall.setEnabled(true);
    zielpfad.setEnabled(true);
    session.setEnabled(true);
    status.setText("");
    los.stop();
  }
  public void fenster() {
    window = new Frame("Aktuelles Bild");
    window.addWindowListener(
       new WindowAdapter() {
         public void windowClosing(WindowEvent event){ window.dispose(); }}
    );


      MediaTracker mt = new MediaTracker(this);
      mt.addImage(img, 0);
      try{
        mt.waitForAll();
      }catch(InterruptedException e){
        System.out.println(e);
      }
    int hoch  =  img.getHeight(this);
    int breit =  img.getWidth(this);
    window.setSize(breit,hoch+25);
    window.add(new Zeichnen());
    window.setVisible(true);
  }
  public class Zeichnen extends Canvas{
    public void paint (Graphics g){
      g.drawImage(img, 1, 1, this);
    }
  }
  // Ende Ereignisprozeduren

  public static void main(String[] args) {
    new WebcamCapture("WebcamCapture");
  }
}
Das ist der Code des anderen Programms.
Würd mich freuen wenn sich jemande meldet.

Gruß Benedikt
 
Hi,

du müsstest dir die Zeichnen()-Komponente irgendwo sichern und an ihr dann das repaint() aufrufen.

Gruß
Mag1c
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben