import java.awt.*;
import java.awt.event.*;
import java.applet.*;public class doublebuffer extends Applet implements Runnable
{
        Image memoryimage;
        Graphics memorygraphics;
        Thread doublebufferthread;
        boolean animateFlag = true;
        int i;
        //Initialize the applet
        public void init()
        {
                memoryimage = createImage(100,100);
                memorygraphics = memoryimage.getGraphics();
        }        public void start()
        {
                doublebufferthread = new Thread(this);
                doublebufferthread.start();
        }        public void stop()
        {
                animateFlag = false;
        }        public void run()
        {
                try
                {
                  while(true) {
                    Thread.sleep(200);
                    repaint();
                  }
                }
                catch(InterruptedException e)
                {                }
        }        public void paint(Graphics g)
        {
                i += 5;
                if(i>=100) i=5;                memorygraphics.setColor(new Color(255,255,255));
                memorygraphics.fillRect(0,0,100,100);
                memorygraphics.setColor(new Color(0,0,0));
                memorygraphics.drawRect(0,0,i,i);
                g.drawImage(memoryimage,10,10,this);
        }
}

解决方案 »

  1.   

    怎么一样,我的代码里有while循环和sleep,我这里运行是正常的
    改成如下:
    import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;public class doublebuffer extends Applet implements Runnable
    {
            Image memoryimage=null;
            Graphics memorygraphics;
            Thread doublebufferthread;
            boolean animateFlag = true;
            int i;
            //Initialize the applet
            public void init()
            {
                    memoryimage=createImage(100,100);
                    memorygraphics = memoryimage.getGraphics();
            }        public void start()
            {
                    doublebufferthread = new Thread(this);
                    doublebufferthread.start();
            }        public void stop()
            {
                    animateFlag = false;
            }        public void run()
            {
                    try
                    {
                      while(true) {
                        Thread.sleep(200);
                        repaint();
                      }
                    }
                    catch(InterruptedException e)
                    {                }
            }        public void paint(Graphics g)
            {
                    i += 5;
                    if(i>=100) i=5;
                    if(memorygraphics==null)
                      memorygraphics = memoryimage.getGraphics();
                    memorygraphics.setColor(new Color(255,255,255));
                    memorygraphics.fillRect(0,0,100,100);
                    memorygraphics.setColor(new Color(0,0,0));
                    memorygraphics.drawRect(0,0,i,i);
                    g.drawImage(memoryimage,10,10,this);
            }
    }