我前面也遇到过  有个网上的双缓冲部分是错的  我给你个新的  你把原来双缓冲的部分 去掉  换成我这个 
/**
 * 增加双缓冲  来缓解图片的闪烁
 */
private Image iBuffer;  
    private Graphics gBuffer;  
    public void update(Graphics scr)  
    {  
        if(iBuffer==null)  
        {  
           iBuffer=createImage(this.getSize().width,this.getSize().height);  
           gBuffer=iBuffer.getGraphics();  
        }  
           gBuffer.setColor(getBackground());  
           gBuffer.fillRect(0,0,this.getSize().width,this.getSize().height);  
           paint(gBuffer);  
           scr.drawImage(iBuffer,0,0,this);  
    }  你把这段代码放在 窗口类中就行了

解决方案 »

  1.   

    我按照你的方法尝试了一下,但是不知道为什么屏幕不能清除之前的图像了(就是人物行走的时候出现重影,并且一直留在那里)。
    我的update方法是按照你的改的。paint方法我是这样写的public void paint(Graphics g){
       player.DrawSprite(g,this);
    }能再帮我看一看吗?非常感谢!
      

  2.   

    package PlaneGameUtil;import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;/**
     * 将一些公用的代码 组成一个父类
     * @author Administrator
     *
     */
    public class MyFrame extends Frame {
    /**
     * 游戏窗口
     */

    public void launchFrame (){
    setSize(Constant.GAME_HIGHT, Constant.GAME_WIDTH);
    setLocation(100, 100);
    setVisible(true);//默认的的窗口为隐藏的  要将值设置为true 才能变成可视化。

    new PaintThread().start();//启动重画窗口的线程

    addWindowListener(new WindowAdapter(){//增加窗口监听内部类 @Override
    public void windowClosing(WindowEvent e) { //重写windowClosing方法。
    System.exit(0);
    }
    });
    }
    /**
     * 增加双缓冲  来缓解图片的闪烁
     */
    private Image iBuffer;  
        private Graphics gBuffer;  
        public void update(Graphics scr)  
        {  
            if(iBuffer==null)  
            {  
               iBuffer=createImage(this.getSize().width,this.getSize().height);  
               gBuffer=iBuffer.getGraphics();  
            }  
               gBuffer.setColor(getBackground());  
               gBuffer.fillRect(0,0,this.getSize().width,this.getSize().height);  
               paint(gBuffer);  
               scr.drawImage(iBuffer,0,0,this);  
        }  


    /**
     * 定义一个重画窗口的类   它是一个内部类
     * @author Administrator
     *
     */
    class PaintThread extends Thread{
    public void run(){
    while(true){
    repaint();
    try {
    Thread.sleep(30);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }//1s=1000ms
    }
    }
    }
    }你把你原来的 面板类 直接换成我的这个吧  你的呢个  我看着好乱   我的这个我已经成功用过了  你直接换掉看看 效果