JFrame ist nicht schwarz

Hallo,
ich habe folgenden Code:
Java:
package klassen;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Color;

public class TetrisMain extends Canvas implements Runnable, KeyListener{
	
	public static final int WIDTH = 400, HEIGHT = 540;
	
	public static void main(String[] args) {
		JFrame frame = new JFrame("Tetris");
		frame.setSize(WIDTH, HEIGHT);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setResizable(false);
		TetrisMain tm = new TetrisMain();
		frame.setVisible(true);
		tm.start();
		
	}
	
	public void start(){
		Thread t = new Thread(this);
		t.setPriority(Thread.MAX_PRIORITY);
		t.start();
	}
	
	public void run(){
		boolean running = true;
		while(running){
			update();
			BufferStrategy buf = getBufferStrategy();
			if(buf == null){
				//createBufferStrategy(3);
				continue;
			}
			Graphics2D g = (Graphics2D) buf.getDrawGraphics();
			render(g);
			buf.show();
		}
	}
	
	public void update(){
		
	}
	
	public void render(Graphics2D g){
		g.setColor(Color.BLACK);
		g.fillRect(0,0, WIDTH, HEIGHT);
		
	}
	public void keyPressed(KeyEvent e){
		
	}
	
	public void keyTyped(KeyEvent e){
		
	}
	
	public void keyReleased(KeyEvent e){
		
	}
}

trotzdem wird das Fenster nicht schwarz:
http://puu.sh/6VUuX.jpg

was habe ich falsch gemacht?

LG
Schweizergeizer
 
Hallo,

zunächst einmal musst du nicht bei jedem durchlauf "getBufferStrategy()" abrufen.
Deine Abfrage ob buf null ist wird wohl jedes mal null zurück geben, da deine BufferStrategy noch nicht initialisiert ist.
Und zu guter letzt "g.dispose()" aufrufen. Ansonsten wird dein Programm mit der Zeit immer mehr Arbeitsspeicher fressen.

Hier mal ein kleines Beispiel.

Java:
private BufferStrategy buf;

public void run(){
	boolean running = true;

	createBufferStrategy(3);
	buf = getBufferStrategy();

	while(running){
	    update();

	    Graphics2D g = (Graphics2D) buf.getDrawGraphics();
	    render(g);

	    buf.show();
	    g.dispose();
	}
}
 
Ist da ein repaint() nicht angebrachter?
Für das Schwarzmachen des Hintergrundes gibt es die setBackground() Methode. Da musst du nicht jedes Mal ein schwarzes Rechteck malen.
 
mal von abgesehen das es, wie schon erwähnt, setBackground() gibt, solltest du dir die main() noch mal zeile für zeile ansehen ... vielleicht merkst du dann was du falsch ... oder sagen wir besser : NICHT ... gemacht hast ...




[ot]ich warte eigentlich nur auf den ersten der es gerade rausschreit ... weil lerneffekt und so mega groß wenn man lösungen vorgibt ... NOT[/ot]
 
Neben der main wäre auch der Thread einer Überprüfung wert. Den kann man besser machen und ich prophezeihe dir, dass das Spiel, wenn es nicht unbedingt unter DOS läuft, so schnell ist, dass keiner hinterher kommt.
 

Zurück
Oben