zwei Bilder nacheinander anzeigen

chrysi

Mitglied
Das Programm soll zuerst 100 Sterne (Datei stern.jpg) 1 Sekunde lang anzeigen und dann 100 Mauerstücke (Datei mauer.jpg). Wenn man das Programm startet, zeigt es aber in der 1. Sekunde nichts an und danach nur die 100 Mauerstücke. Wie kann man die Sterne anzeigen lassen? Danke schonmal!!!

Java:
import java.awt.*;
import javax.swing.*;
import java.io.*;

import java.awt.Graphics;
import java.awt.Event;
import java.awt.Font;
import java.awt.Color;
import java.awt.event.*;

public class Graphikdemo extends JApplet {
 
    private static final long   serialVersionUID    = 1L;
    Image bild;
 
    int x = 0;
    int y = 0;
    int breite = 80;
    String dateiname;
    
    
    public void init() {
        MediaTracker mt = new MediaTracker(this);
     
        dateiname = "./stern.jpg";
        mt.addImage(bild, 0);
        
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {}
        
        dateiname = "./mauer.jpg";  
        mt.addImage(bild, 0);
    }
   
    public void paint(Graphics g) { 
       super.paint(g);
       x = 0;
       y = 0;

       for(int n = 0; n<=9; n++) {
           for(int k = 0; k<=9; k++) {
               bild = getImage(getCodeBase(), dateiname);
               g.drawImage(bild, x, y, breite, breite, this);
               x = x + breite;
            }
            y = y + breite;
            x = 0;
        }
    
    }  
}
 
Das Problem ist, dass du das Applet blockierst. Solange du in der init-Methode steckst, kann nichts gezeichnet werden. Du könntest z.B. einen Timer erstellen, der einmal pro Sekunde eine Methode ausführt. In dieser Methode würdest du dann dein Bild laden. Bitte nicht in der "paint" Methode Bilder laden, diese Methode sollte möglichst schnell ausgeführt werden, und Bilder laden ist nicht gerade billig.

Java:
package forum;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Timer;

public class Test {
	public static void main( String[] args ){
		Timer timer = new Timer( 1000, new ActionListener(){
			private int index = 0;
			@Override
			public void actionPerformed( ActionEvent e ){
				// Diese Method wird einmal pro Sekunde aufgerufen, hier kannst
				// du das Bild laden/ersetzen.
				
				System.out.println( "Hallo " + index );
				index++;
			}
		});
		timer.setInitialDelay( 0 );
		timer.start();

		// Das Zeugs hier ist nur, damit das Programm nicht gleich wieder abschaltet.
		try {
			Thread.sleep( 15000 );
		}
		catch( InterruptedException e1 ) {
			e1.printStackTrace();
		}
	}
}
 

Neue Themen


Zurück
Oben