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 메소드에 순환 루프를두면 스레드는 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); 

}