我现在要用java实现动画的播放,用了以后屏幕老闪。网上说可以用双缓冲技术消除闪烁现象。请java 高手帮忙,急用啊!
老闪的代码:
import java.awt.* ;
import java.applet.*;
public class myimage extends Applet implements Runnable
{
Image pic[ ];
Thread threadmyimage;
int pici;
int delaytime;public void init()
{
int i;
String picpersecond;
pic= new Image[381];
Thread threadmyimage= null;
pici= 0;
for( i= 0; i< pic.length; i++)
{pic[i]= getImage (getCodeBase() , "T"+ i+ ".gif" ) ;
picpersecond= "10";
delaytime= 1000/Integer.parseInt(picpersecond);
}
}public void start()
{
if (threadmyimage== null)
{threadmyimage= new Thread(this) ;
threadmyimage.start();
}
}public void stop()
{
if (threadmyimage != null)
{
threadmyimage.stop();
threadmyimage = null;
}
}public void run()
{
 while(true)
 {
  pause(delaytime);
  repaint();
  pici= (pici+1)%pic.length;
 }
}public void paint(Graphics g)
{
g.drawImage(pic[pici], 0, 0, this);
}void pause( int delaytime) 
{
try{Thread.sleep(delaytime);}
catch(InterruptedException e) {}
}}

解决方案 »

  1.   

    Canvas cg = new Canvas();
    canvas.createBufferStrategy(2);while (xxx)
    {
    BufferStrategy bs = this.canvas.getBufferStrategy();Graphics2D g = (Graphics2D) bs.getDrawGraphics();
    // todo 绘图bs.show();
    }很久以前写的一些小游戏用双缓冲的
    还有配置这个属性会大幅度提高全屏模式下的绘图速度,不知道你的applet有没有
    this.setIgnoreRepaint(true);
      

  2.   

    http://tech.163.com/tm/030407/030407_89188.html
    这写的很详细清楚
    但我是新手
    不知道怎么实现
    谁帮帮我啊
    谢谢了
      

  3.   

    都搞复杂了。解决办法:将你所有用到的awt的组件换成swing组件即可。swing组件都默认实现了双缓冲。