Проблема с двойным буфером Java-апплета (и проблема с контуром)


0

По какой-то причине, когда я пытаюсь удвоить буфер, Java-апплет показывает белый квадрат, хотя я не говорю об этом. Также, если я попытаюсь поместить цикл в start(), я получаю только белый экран, даже если repaint() находится в конце.

/** 
* @(#)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

Положите проверку на размер в методе краски. Если размер изменился, создайте новое изображение, а затем нарисуйте его и сохраните информацию о новом размере. Кроме того, не вызывайте перерисовку, поскольку у вас есть рекурсивный вызов рисования.

Если вы положили бесконечный цикл в методе старта, нить никогда не выйдет из метода start.

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); 

}