关于双缓冲解决闪烁现象出现的问题,求助!!!
前言:刚接触双缓冲机制,有个问题我现在的能力无法解决,所以走上csdn求助,望各位大哥不吝赐教。
问题描述:我所认知的观点是1.repaint()方法能主动调用paint()方法从而使图像重画;2.repaint()方法调用的频率过快会使得paint()方法没来得及执行完毕而被下一个repaint()方法调用的paint()方法冲掉而产生闪烁现象,所以要引进双缓冲机制;3.双缓冲是指repaint()方法在调用paint()方法前先(或者同时)调用update()方法使图像先画在虚拟图像上在与电脑屏幕融合;
问题:当我用Eclipse重写update()方法(自动引入)的时候,出来的update()方法体中会自动执行“super.update();”语句,如下代码。问题就出现在这里,当我按照常规程序在虚拟图像offScreen上画完所需图形,用drawImage()方法把虚拟图像融合到电脑屏幕中后,闪烁现象依然,但是当我注掉“super.update();”这句代码后问题解决,我搞不清楚的是,这句代码为何要出现,我印象中只有子类实例化的时候才会先执行父类的构造方法,那么为什么子类重写父类方法的时候也要先让父类对象调用一下要重写的方法呢?就算是执行了“super.update();”,这句话又是怎样影响到双缓冲的进行的呢?
public void update(Graphics g) {
super.update(g);//自动产生,注掉后,闪烁现象消失。
if (offScreen == null){
offScreen = this.createImage(800,600);
}
Graphics goffScreen = offScreen.getGraphics();
Color c = goffScreen.getColor();
goffScreen.setColor(Color.green);
goffScreen.fillRect(0,0,800,600);
goffScreen.setColor(c);
paint(goffScreen);
g.drawImage(offScreen,0,0,null);
}