Problème de double tampon de l'applet Java (et problème de boucle)


0

Pour une raison quelconque, lorsque j'essaie de doubler le tampon de mon applet Java, il affiche un carré blanc même si je ne le dis pas. Aussi, si j'essaie de mettre une boucle dans start(), je n'ai qu'un écran blanc même si repaint() est à la fin.

/** 
* @(#)vo4k.java 
* 
* vo4k Applet application 
* 
* @author William Starkovich 
* @version 1.00 2009/2/21 
*/ 

import java.awt.*; 
import java.applet.*; 
import java.awt.event.*; 
import java.awt.image.*; 

public class vo4k extends Applet implements KeyListener 
{ 
obj p1, e1; 
boolean[] keys; 
boolean end = false; 
Graphics g2d; 
Dimension size; 
Image buf; 

public void init() 
{ 
    keys = new boolean[256]; 

    for(int i = 0; i < 256; i++) 
     keys[i] = false; 

    addKeyListener(this); 
    p1 = new obj(); 
    p1.x = 0; 

    size = getSize(); 
    buf = createImage(size.width,size.height); 
    g2d = buf.getGraphics(); 
} 

public void keyTyped(KeyEvent e) {} 
public void keyPressed(KeyEvent e) {keys[e.getKeyCode()] = true;} 
public void keyReleased(KeyEvent e) {keys[e.getKeyCode()] = false;} 
public void controls() 
{ 
    if(keys[KeyEvent.VK_SPACE]) 
     end = true; 

    if(keys[KeyEvent.VK_W]) 
     p1.x += 10; 

} 

public void start() 
{ 
// while(!end) 
// { 


// } 
} 

public void paint(Graphics g) 
{ 

    controls(); 
    //g2d = (Graphics2D) g; 
    g2d.setColor(Color.RED); 
    g2d.fillRect(0,0,size.width,size.height); 
    g2d.setColor(Color.BLUE); 
    g2d.drawString("Welcome 2 Java!!", (int) 50, 60); 
    //g2d.drawString("Welcome to Java!!", (int) p1.x, 60); 


    g.drawImage(buf, 0, 0, this); 
    repaint(); 
} 
} 

class obj 
{ 
    double x,y,l,a,s; 
} 
1

Vérifiez la taille de la méthode de peinture. Si la taille a changé, créez une nouvelle image, puis dessinez dessus et stockez les nouvelles informations de taille. Aussi, n'appelez pas repeindre car vous n'avez qu'un appel récursif à peindre.

Si vous placez une boucle sans fin dans la méthode de démarrage, le thread ne quitte jamais la méthode de démarrage.

public void paint(Graphics g) 
{ 

     controls(); 
     Dimension currentSize = getSize(); 
     if (! currentSize.equals(size)) { 
      size = currentSize; 
      buf = createImage(size.width,size.height); 
      g2d = buf.getGraphics(); 
     } 
     //g2d = (Graphics2D) g; 
     g2d.setColor(Color.RED); 
     g2d.fillRect(0,0,size.width,size.height); 
     g2d.setColor(Color.BLUE); 
     g2d.drawString("Welcome 2 Java!!", (int) 50, 60); 
     //g2d.drawString("Welcome to Java!!", (int) p1.x, 60); 


     g.drawImage(buf, 0, 0, this); 

}