1. 程式人生 > >Java程序性能優化之緩沖優化

Java程序性能優化之緩沖優化

nim java.awt extends sta AI image ova extend vax

優化前的代碼:

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一次性顯示出來
    }

}

Java程序性能優化之緩沖優化