zoukankan      html  css  js  c++  java
  • 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一次性显示出来
        }
    
    }
  • 相关阅读:
    03-spring bean
    04-spring的依赖注入
    01-课程安排
    17-注解开发
    WIN10新机必要设置记录 for 3dsmax
    ps导出svg
    VS C# 共享项目
    在Maxscript中创建.Net类型
    C# 自定义索引
    C# ?
  • 原文地址:https://www.cnblogs.com/hujinshui/p/8673425.html
Copyright © 2011-2022 走看看