Applet flackert bei animiertem gif

b_reath

Mitglied
Hallo Leute,

ich wollte mich erkundigen wieso mein Applet flackert wenn ich ein animiertes GIF hinzufüg.

Java:
import java.applet.*; 
import java.awt.*; 

public class world extends Applet {
	Image img1, img2, img3, img4;
	
	public void init() {
		img1 = getImage(getCodeBase(), "battle_background.png");
		img2 = getImage(getCodeBase(), "bilder/gras1_day.png");
		img4 = getImage(getCodeBase(), "Laura.png");
		img3 = getImage(getCodeBase(), "243.gif");
	} 
	
	public void paint(Graphics g) {
		g.drawImage(img1, 0, 0, this);
		g.drawImage(img2, 0, 0, this);
		g.drawImage(img3, 0, 0, this);
		g.drawImage(img4, 0, 0, this);
	} 
}

Ist es weil paint bei jeder Frame von dem gif ausgeführt wird und die anderen Bilder auch nochmal "malt"?

Mit freunlichen Grüßen
b_reath
 

Volvagia

Top Contributor
Das kommt daher, dass vorher der Bildschirm komplett mit einer Farbe (idR. weiß) gefüllt wird. Schau dir mal Double Buffering an, dabei wird zuerst alles auf eine Image-Instance gezeichnet und dann komplett mit dem Inhalt des Applets ersetzt.

btw. Klassennamen sollte man groß schreiben.
Ob ein animiertes gif wirklich eine gute Idee ist, weiß ich nicht. Besser wäre es vielleicht Bilder mit einen Thread zu animieren.
 

b_reath

Mitglied
Das kommt daher, dass vorher der Bildschirm komplett mit einer Farbe (idR. weiß) gefüllt wird. Schau dir mal Double Buffering an, dabei wird zuerst alles auf eine Image-Instance gezeichnet und dann komplett mit dem Inhalt des Applets ersetzt.

btw. Klassennamen sollte man groß schreiben.
Ob ein animiertes gif wirklich eine gute Idee ist, weiß ich nicht. Besser wäre es vielleicht Bilder mit einen Thread zu animieren.

Danke für dir Information, ich werd mir mal Double Buffering anschaun.

Das ich den Klassennamen groß schreiben soll hab ich nichts dagegen, jedoch würde mich das interessieren warum man das machen sollte.
Ich habe aber mehr als 600 animierte gif datein die ich sobald sie gebraucht werden geladen werden.

Mit freundlichen Grüßen
b_reath
 

nrg

Top Contributor
Das ich den Klassennamen groß schreiben soll hab ich nichts dagegen, jedoch würde mich das interessieren warum man das machen sollte.

warum schreibt man "das" mit Doppel s, wenn es eine Konjunktion ist?

Das sind halt einfach Konventionen, an die man sich halten sollte. Dadurch ist ein Code um einiges sauberer und einfacher zu lesen. Wenn du Klassen klein schreibst, kannst du z.B. nicht mehr ohne weiteres zwischen statischen und instanziierten Methodenaufrufen unterscheiden.
 

b_reath

Mitglied
Danke das mit dem Double Buffering hat geklappt.

Java:
import java.applet.*; 
import java.awt.*; 
import java.util.*;
import java.text.*;

public class World extends Applet {
	Image img1, img2, img3, img4;
	
	private Image dbImage;
	private Graphics dbg;
	
	public void init() {
		img1 = getImage(getCodeBase(), "battle_background.png");
		img2 = getImage(getCodeBase(), "bilder/gras1_day.png");
		img4 = getImage(getCodeBase(), "Laura.png");
		img3 = getImage(getCodeBase(), "243.gif");
	} 
	
	public void update(Graphics g) {
		if (dbImage == null) {
			dbImage = createImage(this.getSize().width, this.getSize().height);
			dbg = dbImage.getGraphics();
		}
		
		dbg.setColor(getBackground ());
		dbg.fillRect(0, 0, this.getSize().width, this.getSize().height);
		
		dbg.setColor(getForeground());
		paint(dbg);
		
		g.drawImage(dbImage, 0, 0, this);
	}
	
	public void paint(Graphics g) {
		g.drawImage(img1, 20, 20, this);
		g.drawImage(img2, 230, 25, this);
		g.drawImage(img3, 170, 45, this);
		g.drawImage(img4, 0, 0, this);
	} 
}
 

Volvagia

Top Contributor
Warum lagerst du es nicht in eine andere Klasse aus? So siehst du es nicht bei jeder Änderung, und kannst die fast komplett um das Eigendliche kümmern. So nach dem Prinzip "Aus dem Auge - aus dem Sinn".

Java:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;

public class World extends Applet
{
	private static final long serialVersionUID = 1L;

	private Image img;
	private DoubleBufferingController dbc;
    
	public void init()
	{
		img = getImage(getCodeBase(), "background.png");
		
		dbc = new DoubleBufferingController(this);
		dbc.setBackground(Color.RED); //Set background of buffer, default is white.
		dbc.update(this); //Update the buffer, needing if size of comp is change. (To resize buffer.)
	}
    public void paint(Graphics g)
    {
    	dbc.prepare(); //Prepare buffer for next scene.
    	Graphics bufferG = dbc.getGraphics(); //Get Graphics from buffer.
    	
    	bufferG.drawImage(img, 40, 40, this); //Draw on buffer. (Don't use 'g', otherwise the buffer overdraw the image.)
    	
    	dbc.show(g); //Show buffer on applet.
    }
    public void update(Graphics g)
	{
		paint(g);
	}
}

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;

public class DoubleBufferingController
{
	private Image buffer;
	private Graphics graphics;
	private ImageObserver observer;
	
	public DoubleBufferingController(Component comp)
	{
		super();
		update(comp);
		graphics.setColor(Color.WHITE);
	}
	private void clearBuffer()
	{
		graphics.fillRect(0, 0, buffer.getWidth(observer), buffer.getHeight(observer));		
	}
	
	public void prepare()
	{
		clearBuffer();
	}
	public void show(Graphics g)
	{
		g.drawImage(buffer, 0, 0, observer);
	}
	public void setBackground(Color c)
	{
		graphics.setColor(c);
	}
	public void update(Component comp)
	{
		buffer = new BufferedImage(comp.getWidth(), comp.getHeight(), BufferedImage.TYPE_INT_ARGB);
		Graphics newGraphics = buffer.getGraphics();
		if(graphics != null)		
			newGraphics.setColor(graphics.getColor());
		graphics = newGraphics;
		observer = comp;
	}
	
	public Graphics getGraphics()
	{
		return(graphics);
	}
}

Ich hoffe, dass das so einfach zu verstehen ist, wie ich denke.
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
Man kann doch den ganzen DoubleBuffering-Kram umgehen, wenn man auf das moderne Swing setzt.
In Swing sind alle Komponenten standardmäßig doppel gepuffert, die Implementierung eines solchen Mechanismus ist da nicht mehr nötig.

Java-Versionen unter 1.4.2 haben heute kaum noch Bedeutung bzw. dürften ausgestorben sein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java-Applet zur Mittelwertberechnung Java Basics - Anfänger-Themen 3
D Java Applet wird nicht im Browser angezeigt Java Basics - Anfänger-Themen 6
M bestehendes Projekt als Applet speichern Java Basics - Anfänger-Themen 2
S Erste Schritte Java - Applet - Rechteck ständig versetzen Java Basics - Anfänger-Themen 14
A Applet Plot für atan erstellen Java Basics - Anfänger-Themen 1
S Erste Schritte Java Applet lässt sich im Browser nicht öffnen Java Basics - Anfänger-Themen 9
K JDK installieren displays java applet für MAC Java Basics - Anfänger-Themen 10
S Zeichen von abgerundeten Rechtecken auf einem Applet Java Basics - Anfänger-Themen 5
J Einfache einbindung eines Bildes in ein Applet Java Basics - Anfänger-Themen 4
S Klassen Applet extern aufrufen Java Basics - Anfänger-Themen 1
J Erstes Applet läßt sich nicht anzeigen Java Basics - Anfänger-Themen 2
C Applet Probleme Java Basics - Anfänger-Themen 1
A Compiler-Fehler Problem beim einbinden der applet Klasse Java Basics - Anfänger-Themen 2
M Erste Schritte Java Applet - HTML Seiten auslesen und in Access Datenbank schreiben? Java Basics - Anfänger-Themen 15
G Applet in ein JSP einbinden Java Basics - Anfänger-Themen 1
C Java-Applet Fehler "NoClassDefFoundError"? Java Basics - Anfänger-Themen 1
C Java Applet Fragen: Serialisierung, Excel import Java Basics - Anfänger-Themen 2
C Kalender in Applet einfügen Java Basics - Anfänger-Themen 0
J JavaScript findet Applet Methode nicht Java Basics - Anfänger-Themen 2
J Punkte im Java-Applet verbinden Java Basics - Anfänger-Themen 4
D Bild im Applet anzeigen Java Basics - Anfänger-Themen 3
V Text aus einer .txt dynamisch ins applet einpassen Java Basics - Anfänger-Themen 0
K Applet funz. im Browser nicht Java Basics - Anfänger-Themen 11
M Java-Applet: Bild einbinden (getImage) Java Basics - Anfänger-Themen 0
thet1983 Erste Schritte <param> Tag in Applet Java Basics - Anfänger-Themen 4
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
G Signiertes Applet wird nicht ausgeführt Java Basics - Anfänger-Themen 1
Y Applet: Verschlüsselung Java Basics - Anfänger-Themen 3
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
F signiertes Applet fkt. nicht bei lokalem Aufruf Java Basics - Anfänger-Themen 2
K Frage zu Applet Java Basics - Anfänger-Themen 3
V While Schleife für ganzes Applet Java Basics - Anfänger-Themen 6
P Applet Histogramm Java Basics - Anfänger-Themen 6
H 27 Kreise Zeichnen Java Applet Java Basics - Anfänger-Themen 2
G Java Applet aus Eclipse heraus testen? Java Basics - Anfänger-Themen 6
S Applet findet Klasse nicht Java Basics - Anfänger-Themen 7
R Java Applet mit Mausklick ansprechen Java Basics - Anfänger-Themen 3
C Java Applet in html. Pong - old school Spiel Java Basics - Anfänger-Themen 10
S Applet-Objekt ist vor dem Hintergrund Java Basics - Anfänger-Themen 11
F Problem mit Applet Java Basics - Anfänger-Themen 5
A Applet mit Object-Tags einbinden. Java Basics - Anfänger-Themen 3
S Erste Schritte Fenster wechsel im Applet Java Basics - Anfänger-Themen 7
S Applet Deployment Java Basics - Anfänger-Themen 2
X Applet Fehler: java.lang.reflect.InvocationTargetException Java Basics - Anfänger-Themen 45
H Applet - main()-Methode Java Basics - Anfänger-Themen 4
K Applet wird nicht im Browser und Appletviewer angezeigt Java Basics - Anfänger-Themen 5
L Applet : keine Recht für Zugriff auf Clipboard (trotz Zertifikat) Java Basics - Anfänger-Themen 4
N Erste Schritte Applet zeichnet Bild nicht Java Basics - Anfänger-Themen 10
H Klassen in Eclipse stellt es im Ausgabe-Applet nicht dar Java Basics - Anfänger-Themen 5
L Applet soll Html-File öffnen Java Basics - Anfänger-Themen 2
L NetBeans Applet in html Java Basics - Anfänger-Themen 4
Dogge Start:Applet nicht Initialisiert Java Basics - Anfänger-Themen 11
D Applet beenden Java Basics - Anfänger-Themen 7
Dogge Problem mit paint(Graphics g) im Applet Java Basics - Anfänger-Themen 13
M RSA Applet ohne Cipher Java Basics - Anfänger-Themen 15
B String verschlüsseln - Applet - ohne BASE64 Java Basics - Anfänger-Themen 7
S Methode in Applet starten Java Basics - Anfänger-Themen 2
M AWT Applet - Button aus anderer Klasse abfragen Java Basics - Anfänger-Themen 4
W Probleme mit Java Applet Java Basics - Anfänger-Themen 5
M Applet kann in Browser nicht ausgeführt werden Java Basics - Anfänger-Themen 4
L Applet: Laden unterbricht den Browserfokus (scrollen) Java Basics - Anfänger-Themen 2
Z Applet startet nicht bei Domain mit Umlaut Java Basics - Anfänger-Themen 2
B Externe Libraries fuer Applet ... Pfad eingeben? Java Basics - Anfänger-Themen 23
Helgon ClassNotFound Applet Java Basics - Anfänger-Themen 6
U Applet Signiert und trotzdem Fehlermeldung Java Basics - Anfänger-Themen 18
E Schach in Java-Applet <No main classes found> Java Basics - Anfänger-Themen 5
S Applet Java Basics - Anfänger-Themen 2
S [Applet] Objekte von init bei paint benutzen Java Basics - Anfänger-Themen 9
E Applet wird nicht angezeigt Java Basics - Anfänger-Themen 11
P Problem- Java Applet wird nicht ausgeführt Java Basics - Anfänger-Themen 9
B Applet - Laden eines Java-Fensters bricht ab Java Basics - Anfänger-Themen 6
N Import Problem, Applet will nicht Java Basics - Anfänger-Themen 6
M Applet Eclipse Vollbild Java Basics - Anfänger-Themen 3
K Befehl per Shell an Java-Applet JAR übergeben Java Basics - Anfänger-Themen 16
I Java Applet Java Basics - Anfänger-Themen 8
D Java Applet Dateien auf Server auslesen? Java Basics - Anfänger-Themen 8
L Referenced Libraries korrekt in Java Applet einbinden.. Java Basics - Anfänger-Themen 2
KBJ Java Applet Gästebuch Java Basics - Anfänger-Themen 12
T Java Applet braucht mehrere Minuten zu Start Java Basics - Anfänger-Themen 5
U Applet wird nicht angezeigt Java Basics - Anfänger-Themen 2
J J-Applet, Frage Java Basics - Anfänger-Themen 19
J Applet farblich gestalten Java Basics - Anfänger-Themen 5
M Applet lokaler Festplattenzugriff Java Basics - Anfänger-Themen 25
X Applet - Client/Server Java Basics - Anfänger-Themen 2
M Applet ist nur graues Feld Java Basics - Anfänger-Themen 12
O webserver für Applet und php Java Basics - Anfänger-Themen 7
J Fehlermeldung: Applet nicht initialisiert Java Basics - Anfänger-Themen 24
C Java Applet Probleme Java Basics - Anfänger-Themen 4
S Probleme mit Java 3D Tutorial (Applet) Java Basics - Anfänger-Themen 7
S Input/Output Problem mit dateizugriff innerhalb der .jar (Applet) Java Basics - Anfänger-Themen 2
M Applet + BilderDownload Java Basics - Anfänger-Themen 36
O Applet Wetterticker Java Basics - Anfänger-Themen 17
W KeyListener auf Applet mit Runnable Java Basics - Anfänger-Themen 4
M Bild in Applet darstellen Java Basics - Anfänger-Themen 6
W Applet funktiniert nur in Eclipse Java Basics - Anfänger-Themen 2
S Erste Schritte Machbarkeit: Applet oder GUI-Applikation? Java Basics - Anfänger-Themen 3
R Daten von Applet an Website Java Basics - Anfänger-Themen 4
A Linie Zeichnen Applet mit Double Wert Java Basics - Anfänger-Themen 3
O (von Applet) daten an Server übergeben Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben