Java程序性能優化之緩沖優化
阿新 • • 發佈:2018-03-30
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){ } } publicvoid 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程序性能優化之緩沖優化