Java程序性能优化之缓冲优化

优化前的代码:

package com;



import javax.swing.*;
import java.awt.*;

/**
 * 使用Eclipse,右键Run As,Java Applet运行
 *         优化前效果:出现画面抖动和白光效果
 * @author 胡金水
 *
 */
public class NoBufferMovingCircle extends JApplet implements Runnable {

    Image screenImage = null;
    Thread thread;
    int x = 5;
    int move = 1;

    public void init(){
        screenImage = createImage(230,160);
    }

    public void start(){
        if(thread == null){
            thread = new Thread(this);
            thread.start();
        }
    }


    @Override
    public void run() {
        try{
            while (true){
                x += move;
                if((x > 105) || (x < 5)){
                    move *= -1;
                }
                repaint();
                Thread.sleep(10);
            }
        }catch (Exception e){

        }
    }

    public void drawCircle(Graphics gc){
        Graphics2D g = (Graphics2D) gc;
        g.setColor(Color.GREEN);
        g.fillRect(0,0,200,100);
        g.setColor(Color.red);
        g.fillOval(x,5,90,90);
    }

    public void paint(Graphics g){
        g.setColor(Color.white);
        g.fillRect(0,0,200,100);
        drawCircle(g);
    }


}

  优化后的代码:

package com;

import java.awt.Color;
import java.awt.Graphics;

/**
 * 使用Java Applet运行
 *         优化后,没有出现画面抖动和白光效果
 * @author 胡金水
 * 
 */
public class BufferMovingCircle extends NoBufferMovingCircle{
    
    Graphics doubleBuffer = null;//缓冲区
    
    public void init() {
        super.init();
        doubleBuffer = screenImage.getGraphics();
    }
    
    public void paint(Graphics g) {//使用缓冲区,优化原有的paint()方法
        doubleBuffer.setColor(Color.white);//先在内存中画图
        doubleBuffer.fillRect(0, 0, 200, 100);
        drawCircle(doubleBuffer);
        g.drawImage(screenImage, 0, 0, this);//将buffer一次性显示出来
    }

}
原文地址:https://www.cnblogs.com/hujinshui/p/8673425.html