Double Buffering Problem in html

My double buffering works in my IDE, but not when embedded in html.
import javax.swing.*;
import java.applet.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
class Brick
    public int x,y;   
    public Brick(int x,int y) {this.x = x;this.y = y;}
class Ball
    public int x,y,a,b;
    public Ball(int x, int y) {this.x = x;this.y = y;}
public class Pong2 extends JApplet implements MouseListener, MouseMotionListener, Runnable, KeyListener
    long tm = System.currentTimeMillis();
    int delay;
    int a1=0,b1=0,c1=0,d1=0;
    int dead;
    int ranB1,ranB2;
    boolean pauseB = false;
    boolean starttext = true;
    int ani = 0;
    String stringWin;
    Graphics offscreen;Image image;
    private final int INIT_ACTIVE = 0;
    private final int INTRO_ACTIVE = 1;
    private final int GAME1_ACTIVE = 2;
    private final int GAME2_ACTIVE = 3;
    private final int GAME3_ACTIVE = 4;
    private int r1,r2,r3,r4,r5,starter=0,win=0,own=0;
    private int gameflag;
    private boolean player = true,moveB = true,thisB = true,timerB = true;
    private boolean drawB = true;
    private int counte=0;
    private int time = -2;
    private int movecheck1; int movecheck2;int movecheck3;int movecheck4;
    private int c;
    private int god = 0;
    private int tempx1, tempy1,tempx2,tempy2;
    private int pause = 2, resume = 0;
    private int ran, ran2,ran3,ran4;
    private int yCheck1,yCheck2,yCheck3,yCheck4,xCheck1,xCheck2,xCheck3,xCheck4;
    private int begin = 0;
    private int counter = 0, colorChange =0;
    private Brick brick[] = new Brick[4];
    private Ball ball[] = new Ball[2];
    private Ball ball2[] = new Ball[8];
    private int cons1 = 0,cons2 = 0,cons3=0,cons4=0;
    private int score1=10, score2=10,score3=10,score4=10;
    private Thread t;
    private Font font;
    private AudioClip match,teleport,headshot, ballbounce, dkill,humiliation,one,two,three,fight,prepare;   
    public Image paddle3,paddle4,rarrow,dbuffer,paddle,paddle2,bricks,blood,title,edge,m_imgOffScr;
    private Graphics dbuffer_gfx,m_gOffScr,dbg;
    private Color Color1 = new Color(255,255,255);
    private Color sColor3 = new Color(139,80,14);
    private Color sColor2 = new Color(0,255,0);
    private Color sColor4 = new Color(255,255,0);
    private Polygon poly1 = new Polygon();Polygon poly2 = new Polygon(); 
    private Polygon poly3 = new Polygon();Polygon poly4 = new Polygon();
    private boolean p1Dead=false, p2Dead=false, p3Dead=false, p4Dead=false;
    private int ranLoc, winner;
    public void initgame()
        poly1.addPoint(0,0);poly1.addPoint(0,125);poly1.addPoint(125,0);
        poly2.addPoint(0,650);poly2.addPoint(125,650);poly2.addPoint(0,525);
        poly3.addPoint(650,0);poly3.addPoint(650,125);poly3.addPoint(525,0);
        poly4.addPoint(650,650);poly4.addPoint(650,525);poly4.addPoint(525,650);
        for (int j = 0; j < ball.length; j++){ball[j] = new Ball(325,325);}
        brick[0] = new Brick(25,285);
        brick[1] = new Brick(615,285);
        brick[2] = new Brick(285,25);
        brick[3] = new Brick(285,615);
        yCheck1 = brick[0].y; yCheck2 = brick[1].y; yCheck3 = brick[2].y; yCheck4 = brick[3].y;
        xCheck1 = brick[0].x; xCheck2 = brick[1].x; xCheck3 = brick[2].x; xCheck4 = brick[3].x;
        if(player)
        for (int n = 0; n<8; n++)
            r1 = (int)(Math.random() * 600)+10;r2 = (int)(Math.random() * 600)+10;
            ball2[n] = new Ball(r1,r2);
            if (n == 0||n==4) {ball2[n].a = 3; ball2[n].b = 3;}if (n == 1||n==5) {ball2[n].a = -3; ball2[n].b = 3;}
            if (n == 2||n==6) {ball2[n].a = 3; ball2[n].b = -3;}if (n == 3||n==7) {ball2[n].a = -3; ball2[n].b = -3;}           
        player = false;
    public void init()
        gameflag = INIT_ACTIVE;
        setSize(650,725);
        requestFocus();      
        Font font = new Font ("Arial", Font.BOLD,50);
        paddle = getImage(getCodeBase(), "paddle.jpg");
        paddle2 = getImage(getCodeBase(), "paddle2.jpg");
        paddle3 = getImage(getCodeBase(), "paddle3.jpg");
        paddle4 = getImage(getCodeBase(), "paddle4.jpg");
        bricks = getImage(getCodeBase(), "bricks.jpg");
        blood = getImage(getCodeBase(), "blood.jpg");
        title = getImage(getCodeBase(), "title.jpg"); 
        headshot = getAudioClip(getCodeBase(), "headshot2.wav");
        ballbounce = getAudioClip(getCodeBase(), "ir_begin.wav");
        humiliation = getAudioClip(getCodeBase(), "humiliation.wav");
        prepare = getAudioClip(getCodeBase(), "prepare.wav");
        teleport = getAudioClip(getCodeBase(), "teleport.wav");
        match = getAudioClip(getCodeBase(), "matchwin.wav");
        dbuffer=createImage(getSize().width,getSize().height);
        dbuffer_gfx=dbuffer.getGraphics();
        initgame();
        addMouseListener(this);
        addMouseMotionListener(this);
        addKeyListener(this);
    public void start()
        Thread t = new Thread(this);
        t.start();
        new Thread(pMovement).start();                       
    public void stop()
        t.yield();
        t = null;
    public void update (Graphics g)
        paint(dbuffer_gfx);
        g.drawImage(dbuffer,0,0,this);
    public void PaintIntro(Graphics g)
        g.setColor(Color.white);
        g.fillRect(0,0,650,725);
        g.setColor(Color.black);
        for(int wa = 0;wa<8;wa++)
        g.fillOval(ball2[wa].x,ball2[wa].y,10,10);
        g.drawImage(title,100,100,this);
        g.setFont(new Font("Arial", Font.BOLD,20));
        g.drawString("Written By Alec Parenzan",200,200);
        g.setFont(new Font("Arial", Font.BOLD,14));
        if (colorChange==0)g.setColor(Color.blue);
        g.drawString("4 Player Game",275,430);
        g.setColor(Color.black);
        if (colorChange==1)g.setColor(Color.blue);
        g.drawString("2 Player Game",275,450);
        g.setColor(Color.black);
        if (colorChange==2)g.setColor(Color.blue);
        g.drawString("1 Player Game",275,470);
    public void PaintGame1 (Graphics g)
        g.setColor(Color.black);
        g.drawImage(blood,0,0,650,650,this);
        if(p1Dead==false && own>0 )g.drawImage(paddle3,brick[0].x,brick[0].y,10,80,this);
        if(p2Dead==false&& own>0)g.drawImage(paddle,brick[1].x,brick[1].y,10,80,this);
        if(p3Dead==false&& own>0)g.drawImage(paddle2,brick[2].x,brick[2].y,80,10,this);
        if(p4Dead==false&& own>0)g.drawImage(paddle4,brick[3].x,brick[3].y,80,10,this);
        g.fillPolygon(poly1);g.fillPolygon(poly2);g.fillPolygon(poly3);g.fillPolygon(poly4);
        g.setColor(Color.white);
        g.drawPolygon(poly1);g.drawPolygon(poly2);g.drawPolygon(poly3);g.drawPolygon(poly4);
        g.setColor(Color.black);
        if(begin==1 && drawB)
        {g.fillOval(ball[0].x,ball[0].y,10,10);g.fillOval(ball[1].x,ball[1].y,10,10);}
        g.drawImage(bricks,1,650,650,75,this);
        //score
        g.setFont(new Font("Comic Sans MS", Font.ITALIC,50));
        if(own>0){
            g.setColor(sColor2);g.drawString(Integer.toString(score1),50,705);
            g.setColor(Color.orange);g.drawString(Integer.toString(score2),150,705);
            g.setColor(Color.blue);g.drawString(Integer.toString(score3),440,705);
            g.setColor(sColor3);g.drawString(Integer.toString(score4),540,705);}
        //painting gui
        if (starttext) {g.setColor(Color.black);
            g.setFont(new Font("Arial", Font.ITALIC,30));g.drawString("Click START to Begin",175,325);}
        g.setColor(Color1);
        g.setFont(new Font("Arial", Font.BOLD,30));
        if(pause ==1 && begin>0)g.drawString("RESUME",270,700);
        else if(begin==0)g.drawString("START",270,700);
        else if(begin>=1 && begin<=2 && pause==0){g.drawString("PAUSE",270,700);}    
        //start
        g.setFont(font);g.setColor(Color.black);
        if(win ==1){if(winner==1)g.setColor(Color.green);else if(winner==2)g.setColor(Color.orange);
            else if(winner==3)g.setColor(Color.blue);else if(winner==4)g.setColor(sColor3);           
            g.drawString(stringWin,245,325);}
        g.setColor(Color.black);
        if (time == 1)g.drawString("3",300,325);
        else if (time==2)g.drawString("2",300,325);
        else if (time==3)g.drawString("1",300,325);          
    public void PaintGame2(Graphics g)
        g.setColor(Color.black);
        g.drawImage(blood,0,0,650,650,this);
        if(p1Dead==false && own>0 )g.drawImage(paddle3,brick[0].x,brick[0].y,10,80,this);
        if(p2Dead==false&& own>0)g.drawImage(paddle,brick[1].x,brick[1].y,10,80,this);
        g.fillPolygon(poly1);g.fillPolygon(poly2);g.fillPolygon(poly3);g.fillPolygon(poly4);
        g.setColor(Color.white);
        g.drawPolygon(poly1);g.drawPolygon(poly2);g.drawPolygon(poly3);g.drawPolygon(poly4);
        g.setColor(Color.black);
        if(begin==1 && drawB)
        {g.fillOval(ball[0].x,ball[0].y,10,10);g.fillOval(ball[1].x,ball[1].y,10,10);}
        g.drawImage(bricks,1,650,650,75,this);
        //score
        g.setFont(new Font("Comic Sans MS", Font.ITALIC,50));
        if(own>0){
            g.setColor(sColor2);g.drawString(Integer.toString(score1),50,705);
            g.setColor(Color.orange);g.drawString(Integer.toString(score2),540,705);}
        //painting gui
        if (starttext) {g.setColor(Color.black);
            g.setFont(new Font("Arial", Font.ITALIC,30));g.drawString("Click START to Begin",175,325);}
        g.setColor(Color1);
        g.setFont(new Font("Arial", Font.BOLD,30));
        if(pause ==1 && begin>0)g.drawString("RESUME",270,700);
        else if(begin==0)g.drawString("START",270,700);
        else if(begin>=1 && begin<=2 && pause==0){g.drawString("PAUSE",270,700);}    
        //start
        g.setFont(font);g.setColor(Color.black);
        if(win ==1){if(winner==1)g.setColor(Color.green);else if(winner==2)g.setColor(Color.orange);}
        g.setColor(Color.black);
        if (time == 1)g.drawString("3",300,325);
        else if (time==2)g.drawString("2",300,325);
        else if (time==3)g.drawString("1",300,325);     
    //paint graphics
    public void paint(Graphics g)
            g.setColor(Color.WHITE);
            g.fillRect(0,0,500,500);
            g.setColor(Color.BLACK);
        if (gameflag == INIT_ACTIVE)
            g.setColor(Color.black);
            g.fillRect(0,0,getSize().width,getSize().height);
            g.setColor(Color.white);
            g.drawString("Loading...",getSize().width/2, getSize().height/2);
        if (gameflag == INTRO_ACTIVE){PaintIntro(g);}
        if (gameflag == GAME1_ACTIVE){PaintGame1(g);} 
        if (gameflag == GAME2_ACTIVE || gameflag == GAME3_ACTIVE){PaintGame2(g);}
    public void paddlephys()
        for(int j =0; j < 2;j++)
            //P1
            if(p1Dead==false&&ball[j].x-4<=xCheck1 && ball[j].x<=xCheck2 && begin==1)
                if (ball[j].y>=yCheck1&&ball[j].y<=yCheck1+12) {ball[j].a=2;ball[j].b=-4;ballbounce.play();}
                else if (ball[j].y>=yCheck1+13&&ball[j].y<=yCheck1+25) {ball[j].a=3;ball[j].b=-3;ballbounce.play();}
                else if (ball[j].y>=yCheck1+26&&ball[j].y<=yCheck1+39) {ball[j].a=4;ball[j].b=-2;ballbounce.play();}
                else if (ball[j].y>=yCheck1+40&&ball[j].y<=yCheck1+53) {ball[j].a=4;ball[j].b=2;ballbounce.play();}
                else if (ball[j].y>=yCheck1+54&&ball[j].y<=yCheck1+66) {ball[j].a=3;ball[j].b=3;ballbounce.play();}
                else if (ball[j].y>=yCheck1+67&&ball[j].y<=yCheck1+79) {ball[j].a=2;ball[j].b=4;ballbounce.play();}
            //P2
            if(p2Dead==false&&ball[j].x>=xCheck2 && ball[j].x<=xCheck2+5 && begin==1)
                if (ball[j].y>=yCheck2&&ball[j].y<=yCheck2+12) {ball[j].a=-2;ball[j].b=-4;ballbounce.play();}
                else if (ball[j].y>=yCheck2+13&&ball[j].y<=yCheck2+25) {ball[j].a=-3;ball[j].b=-3;ballbounce.play();}
                else if (ball[j].y>=yCheck2+26&&ball[j].y<=yCheck2+39) {ball[j].a=-4;ball[j].b=-2;ballbounce.play();}
                else if (ball[j].y>=yCheck2+40&&ball[j].y<=yCheck2+53) {ball[j].a=-4;ball[j].b=2;ballbounce.play();}
                else if (ball[j].y>=yCheck2+54&&ball[j].y<=yCheck2+66) {ball[j].a=-3;ball[j].b=3;ballbounce.play();}
                else if (ball[j].y>=yCheck2+67&&ball[j].y<=yCheck2+79) {ball[j].a=-2;ball[j].b=4;ballbounce.play();}
            //P3
            if(p3Dead==false&&ball[j].y>=yCheck3-5 && ball[j].y<=yCheck3 && begin==1)
                if (ball[j].x>=xCheck3&&ball[j].x<=xCheck3+12) {ball[j].a=-4;ball[j].b=2;ballbounce.play();}
                else if (ball[j].x>=xCheck3+13&&ball[j].x<=xCheck3+25) {ball[j].a=-3;ball[j].b=3;ballbounce.play();}
                else if (ball[j].x>=xCheck3+26&&ball[j].x<=xCheck3+39) {ball[j].a=-2;ball[j].b=4;ballbounce.play();}
                else if (ball[j].x>=xCheck3+40&&ball[j].x<=xCheck3+53) {ball[j].a=2;ball[j].b=4;ballbounce.play();}
                else if (ball[j].x>=xCheck3+54&&ball[j].x<=xCheck3+66) {ball[j].a=3;ball[j].b=3;ballbounce.play();}
                else if (ball[j].x>=xCheck3+67&&ball[j].x<=xCheck3+79) {ball[j].a=4;ball[j].b=2;ballbounce.play();}
            //P4
            if(p4Dead==false&&ball[j].y>=yCheck4 && ball[j].y<=yCheck4+5 && begin==1)
                if (ball[j].x>=xCheck4&&ball[j].x<=xCheck4+12) {ball[j].a=-4;ball[j].b=-2;ballbounce.play();}
                else if (ball[j].x>=xCheck4+13&&ball[j].x<=xCheck4+25) {ball[j].a=-3;ball[j].b=-3;ballbounce.play();}
                else if (ball[j].x>=xCheck4+26&&ball[j].x<=xCheck4+39) {ball[j].a=-2;ball[j].b=-4;ballbounce.play();}
                else if (ball[j].x>=xCheck4+40&&ball[j].x<=xCheck4+53) {ball[j].a=2;ball[j].b=-4;ballbounce.play();}
                else if (ball[j].x>=xCheck4+54&&ball[j].x<=xCheck4+66) {ball[j].a=3;ball[j].b=-3;ballbounce.play();}
                else if (ball[j].x>=xCheck4+67&&ball[j].x<=xCheck4+79) {ball[j].a=4;ball[j].b=-2;ballbounce.play();}
     Runnable pMovement = new Runnable()
         public void run()
             while(moveB)
                 if(pauseB==false){
                 if (brick[0].y == 445) brick[0].y-=2; if (brick[0].y == 125) brick[0].y+=2;
                 if (brick[0].y<445&&brick[0].y>125){if (movecheck1==1){brick[0].y-=1;yCheck1 = brick[0].y;} 
                 else if (movecheck1==-1){brick[0].y+=1;yCheck1 = brick[0].y;} }
                 if (brick[1].y == 445) brick[1].y-=2; if (brick[1].y == 125) brick[1].y+=2;   
                 if (brick[1].y<445&&brick[1].y>125){if (movecheck2==1){brick[1].y-=1;yCheck2 = brick[1].y;}
                 else if (movecheck2==-1){brick[1].y+=1;yCheck2 = brick[1].y;}  }
                 if (brick[2].x == 445) brick[2].x-=2; if (brick[2].x == 125) brick[2].x+=2;   
                 if (brick[2].x<570&&brick[2].x>125){if (movecheck3==1){brick[2].x-=1;xCheck3 = brick[2].x;}
                 else if (movecheck3==-1){brick[2].x+=1;xCheck3 = brick[2].x;}  }
                 if (brick[3].x == 445) brick[3].x-=2; if (brick[3].x == 125) brick[3].x+=2;   
                 if (brick[3].x<570&&brick[3].x>0){if (movecheck4==1){brick[3].x-=1;xCheck4 = brick[3].x;}
                 else if (movecheck4==-1){brick[3].x+=1;xCheck4 = brick[3].x;}  }
                 starter();
                 try{Thread.sleep(2,500);}catch(InterruptedException e){}              
            if(pauseB){try{Thread.sleep(2,500);}catch(InterruptedException e){}}
    public void starter()
        if(starter==1)
            if(gameflag==2){p1Dead=false; p2Dead=false; p3Dead=false; p4Dead=false;}
            if(gameflag==3 || gameflag==4){p3Dead=true;p4Dead=true;}
            a1=0;b1=0;c1=0;d1=0;drawB=true;
            starttext = false;
            win=0;
            score1=10;score2=10;score3=10;score4=10;
            if(gameflag==3 || gameflag==4){score3=0;score4=0;}       
            own=1;
            prepare.play();
            try{Thread.sleep(5000);}catch(InterruptedException e){}
            time=1;
            try{Thread.sleep(1000);}catch(InterruptedException e){}
            time=2;
            try{Thread.sleep(1000);}catch(InterruptedException e){}
            time=3;
            try{Thread.sleep(1000);}catch(InterruptedException e){}
            if(gameflag==2)
                ball[0].a=2;ball[0].b=0;
                ball[1].a=0;ball[1].b=-2;
            if(gameflag==3 || gameflag==4)
                ball[0].a=2;ball[0].b=0;
                ball[1].a=-2;ball[1].b=0;
            ball[0].x = 325; ball[0].y = 325;ball[1].x = 325; ball[1].y = 325;
            pause=0;time=-5;starter=0;begin=1;
    public void run()
        while(thisB)
            if(pauseB==false)
            switch(gameflag)
                case INIT_ACTIVE:
                    repaint();
                    gameflag = INTRO_ACTIVE;
                    try{Thread.sleep(10);}
                    catch(InterruptedException ex){break;}
                    break;
                case INTRO_ACTIVE:             
                    physicsintro();
                    try{Thread.sleep(10);}
                    catch(InterruptedException ex){break;}
                    for(int w = 0;w<8;w++){ball2[w].x+=ball2[w].a;ball2[w].y+=ball2[w].b;}
                    repaint();
                    break;
                case GAME1_ACTIVE:
                    if(countDead())resetter();
                    boundaries();
                    paddlephys();
                    for(int w = 0;w<2;w++){ball[w].x+=ball[w].a;ball[w].y+=ball[w].b;}                  
                    try{Thread.sleep(7,500);}catch(InterruptedException e){break;}     
                    repaint();  
                case GAME2_ACTIVE:
                    if(countDead())resetter();
                    boundaries();
                    paddlephys();
                    for(int w = 0;w<2;w++){ball[w].x+=ball[w].a;ball[w].y+=ball[w].b;}                  
                    try{Thread.sleep(7,500);}catch(InterruptedException e){break;}     
                    repaint();  
                case GAME3_ACTIVE:
                    if(countDead())resetter();
                    boundaries();
                    paddlephys();
                    for(int w = 0;w<2;w++){ball[w].x+=ball[w].a;ball[w].y+=ball[w].b;}                  
                    try{Thread.sleep(7,500);}catch(InterruptedException e){break;}     
                    repaint();  
            if(pauseB==true){repaint();try{Thread.sleep(7,500);}catch(InterruptedException e){}}
    public void boundaries()
        for(int z = 0; z<2;z++)
            ranB1 = (int)(Math.random() * 4);
            //P1 scores
            if(p1Dead==false && ball[z].y<525 && ball[z].y>125 && ball[z].x<2)
                if(score1==1)humiliation.play();
                else headshot.play();               
                score1--;cons1++;              
                ball[z].y=325;ball[z].x=325;
                if(ranB1==0){ball[z].a=1;ball[z].b=1;}else if(ranB1==1){ball[z].a=-1;ball[z].b=1;}
                else if(ranB1==2){ball[z].a=1;ball[z].b=-1;}else if(ranB1==3){ball[z].a=-1;ball[z].b=-1;}               
                if(score1 == 0)p1Dead=true;                                                        
            //P2 scores
            else if(p2Dead==false&& ball[z].y<525 && ball[z].y>125 && ball[z].x>648)
                if(score2==1)humiliation.play();
                else headshot.play();
                score2--;cons2++;     
                ball[z].y = 325;ball[z].x=325;
                if(ranB1==0){ball[z].a=1;ball[z].b=1;}else if(ranB1==1){ball[z].a=-1;ball[z].b=1;}
                else if(ranB1==2){ball[z].a=1;ball[z].b=-1;}else if(ranB1==3){ball[z].a=-1;ball[z].b=-1;}
                if(score2 == 0)p2Dead=true;
            //P3 scores
            else if(p3Dead==false&&ball[z].x<525 && ball[z].x>125 && ball[z].y<2)
                if(score3==1)humiliation.play();
                else headshot.play();               
                score3--;cons3++;          
                ball[z].y = 325; ball[z].x = 325;
                if(ranB1==0){ball[z].a=1;ball[z].b=1;}else if(ranB1==1){ball[z].a=-1;ball[z].b=1;}
                else if(ranB1==2){ball[z].a=1;ball[z].b=-1;}else if(ranB1==3){ball[z].a=-1;ball[z].b=-1;}
                if(score3 == 0)p3Dead=true;
            //P4 Scores
            else if(p4Dead==false&&ball[z].x<525 && ball[z].x>125 && ball[z].y>648)
                if(score4==1)humiliation.play();
                else headshot.play();
                score4--;cons4++;            
                ball[z].y = 325; ball[z].x = 325;
                if(ranB1==0){ball[z].a=1;ball[z].b=1;}else if(ranB1==1){ball[z].a=-1;ball[z].b=1;}
                else if(ranB1==2){ball[z].a=1;ball[z].b=-1;}else if(ranB1==3){ball[z].a=-1;ball[z].b=-1;}
                if(score4 == 0)p4Dead=true;
            if((p1Dead==true && ball[z].y<525 && ball[z].y>125 && ball[z].x<2) || (gameflag==3 || gameflag == 4))
                ballbounce.play();ball[z].a*=-1;
            else if((p2Dead==true && ball[z].y<525 && ball[z].y>125 && ball[z].x>648) || (gameflag==3 || gameflag == 4))
                ballbounce.play();ball[z].a*=-1;
            else if((p3Dead==true &&ball[z].x<525 && ball[z].x>125 && ball[z].y<2) || (gameflag==3 || gameflag == 4))
                ballbounce.play();ball[z].b*=-1;
            else if((p4Dead==true &&ball[z].x<525 && ball[z].x>125 && ball[z].y>648) || (gameflag==3 || gameflag == 4))
                ballbounce.play();ball[z].b*=-1;
            if(poly1.contains(ball[z].x,ball[z].y))
                ballbounce.play();
                if(ranB1 == 0){ball[z].a=1;ball[z].b=5;}else if(ranB1 == 1){ball[z].a=2;ball[z].b=4;}
                else if(ranB1 == 2){ball[z].a=5;ball[z].b=1;}else if(ranB1 == 3){ball[z].a=4;ball[z].b=2;}
            else if(poly2.contains(ball[z].x,ball[z].y))
                ballbounce.play();
                if(ranB1 == 0){ball[z].a=1;ball[z].b=-5;}else if(ranB1 == 1){ball[z].a=2;ball[z].b=-4;}
                else if(ranB1 == 2){ball[z].a=5;ball[z].b=-1;}else if(ranB1 == 3){ball[z].a=4;ball[z].b=-2;}
            else if(poly3.contains(ball[z].x,ball[z].y))
                ballbounce.play();
                if(ranB1 == 0){ball[z].a=-1;ball[z].b=5;}else if(ranB1 == 1){ball[z].a=-2;ball[z].b=4;}
                else if(ranB1 == 2){ball[z].a=-5;ball[z].b=1;}else if(ranB1 == 3){ball[z].a=-4;ball[z].b=2;}
            else if(poly4.contains(ball[z].x,ball[z].y))
                ballbounce.play();
                if(ranB1 == 0){ball[z].a=-1;ball[z].b=-5;}else if(ranB1 == 1){ball[z].a=-2;ball[z].b=-4;}
                else if(ranB1 == 2){ball[z].a=-5;ball[z].b=-1;}else if(ranB1 == 3){ball[z].a=-4;ball[z].b=-2;}
    public void resetter()
        brick[0].x=25;brick[0].y=285;brick[1].x=615;brick[1].y=285;brick[2].x=285;brick[2].y=25;brick[3].x=285;brick[3].y=615;
        if(p4Dead==true && p3Dead==true && p2Dead==true && p1Dead==false){ball[0].x = 325;ball[0].y = 325;ball[1].x = 325;ball[1].y = 325;
            ball[0].a=0;ball[0].b=0;ball[1].a=0;ball[1].b=0;drawB=false;match.play();pause=5;p1Dead=true;begin=0;win=1;winner=1;stringWin="Player 1 Wins";}
        else if(p4Dead==true && p3Dead==true && p2Dead==false && p1Dead==true){ball[0].x = 325;ball[0].y = 325;ball[1].x = 325;ball[1].y = 325;
            ball[0].a=0;ball[0].b=0;ball[1].a=0;ball[1].b=0;drawB=false;match.play();pause=5;p2Dead=true;begin=0;win=1;winner=2;stringWin="Player 2 Wins";}
        else if(p4Dead==true && p3Dead==false && p2Dead==true && p1Dead==true){ball[0].x = 325;ball[0].y = 325;ball[1].x = 325;ball[1].y = 325;
            ball[0].a=0;ball[0].b=0;ball[1].a=0;ball[1].b=0;drawB=false;match.play();pause=5;p3Dead=true;begin=0;win=1;winner=3;stringWin="Player 3 Wins";}
        else if(p4Dead==false && p3Dead==true && p2Dead==true && p1Dead==true){ball[0].x = 325;ball[0].y = 325;ball[1].x = 325;ball[1].y = 325;
            ball[0].a=0;ball[0].b=0;ball[1].a=0;ball[1].b=0;drawB=false;match.play();pause=5;p4Dead=true;begin=0;win=1;winner=4;stringWin="Player 4 Wins";}       
    public boolean countDead()
        if(gameflag==2)
            if(p4Dead==true)a1=1;if(p3Dead==true)b1=1;if(p2Dead==true)c1=1;if(p1Dead==true)d1=1;
            dead = a1 + b1 + c1 + d1;
            if(dead>2)return true;
            else return false;
        if(gameflag==3 || gameflag==4)
            if(p2Dead==true)c1=1;if(p1Dead==true)d1=1;
            dead = c1 + d1;
            if(dead==1) return true;
            else return false;
        return false;
    public void physicsintro()
        for(int aw = 0;aw<8;aw++)
            if(ball2[aw].x >645 || ball2[aw].x < 5)ball2[aw].a *= -1;
            if(ball2[aw].y > 720 || ball2[aw].y <5)ball2[aw].b *= -1;
    public void mouseExited(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
    public void mousePressed(MouseEvent e){}
    public void mouseClicked(MouseEvent e) 
            // resume
            if(pause==1 && e.getX()>=270 && e.getX()<= 360 && e.getY()>=650)
                pauseB=false;pause=0;
            // pause
            else if(pause==0 && e.getX()>=270 && e.getX()<= 360 && e.getY()>=650)
               pauseB=true;pause=1;             
            //start
            else if(begin == 0 && e.getX()>=270 && e.getX()<= 360 && e.getY()>=650)
                starter = 1;              
    public void mouseMoved(MouseEvent e)
        //gui light up
        if(e.getX()>=270 && e.getX()<= 360 && e.getY()>=650){Color1 = new Color(255,255,255);}
        else{Color1 = new Color(0,0,0);}         
        repaint();
    public void mouseDragged(MouseEvent e){}
    public void keyTyped(KeyEvent e){}
    public void keyPressed(KeyEvent e)
        c = e.getKeyCode();
        if(gameflag==2 || gameflag==3)
        switch(c)
            case KeyEvent.VK_1:
            movecheck1 = 1;break;
            case KeyEvent.VK_2:
            movecheck1 = -1;break;           
            case KeyEvent.VK_V:
            movecheck2 = 1;break;
            case KeyEvent.VK_B:
            movecheck2 = -1;break;
            case KeyEvent.VK_K:
            movecheck3 = 1;break;
            case KeyEvent.VK_L:
            movecheck3 = -1;break;
            case KeyEvent.VK_LEFT:
            movecheck4 = 1;break;
            case KeyEvent.VK_DOWN:
            movecheck4 = -1;break;
        if(gameflag==1)
        switch(c)
            case KeyEvent.VK_UP:
            if(colorChange==0)colorChange=2;
            else if(colorChange==1)colorChange=0;
            else if(colorChange==2)colorChange=1;break;
            case KeyEvent.VK_DOWN:
            if(colorChange==0)colorChange=1;
            else if(colorChange==1)colorChange=2;
            else if(colorChange==2)colorChange=0;break;
            case KeyEvent.VK_ENTER:
            if(colorChange==0)gameflag=2;
            if(colorChange==1)gameflag=3;
            if(colorChange==2)gameflag=4;
             break;
    public void keyReleased(KeyEvent e)
        c = e.getKeyCode();
        if (gameflag==2 || gameflag==3)
        switch(c)
            case KeyEvent.VK_1:
            movecheck1 = 0;break;
            case KeyEvent.VK_2:
            movecheck1 = 0;break;
            case KeyEvent.VK_V:
            movecheck2 = 0;break;
            case KeyEvent.VK_B:
            movecheck2 = 0;break;
            case KeyEvent.VK_K:
            movecheck3 = 0;break;
            case KeyEvent.VK_L:
            movecheck3 = 0;break;
            case KeyEvent.VK_LEFT:
            movecheck4 = 0;break;
            case KeyEvent.VK_DOWN:
            movecheck4 = 0;break;
{co                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

Japplet is Swing. Your double buffering code is unneccessary. And you are painting wrong. You should be using paintComponent and not paint. And throw away the
buffered image and update while you are at it.

Similar Messages

  • Double-buffered html JTextPane

    Hi there !
    I am using a JtextPane, displaying a html page, refreshed every second by a thread. This html page changes every second (just a few data). The problem is that the display is flikering and so obnoxious. I tried in vain to make it double-buffered.
    How could I do to fix that ?
    Thx alot.
    Julien

    I'm assuming that you are using the latest version of CVI and NI-DAQ. Then there is a DAQmx example that ships with NI-DAQ that does a Continuous Acquisition with an External Scan Clock and Digital Start Trigger.
    You can find this example in the CVI Folder: ...\CVI70\samples\DAQmx\Analog In\Measure Voltage\Cont Acq-Ext Clk-Dig Start
    Kind regards,
    Karsten
    Applications Engineer
    National Instruments

  • Problem with Double Buffering and Swing

    Hi
    I made a game and basically it works pretty well, my only problem is it flickers really badly right now. I read up on a whole lot of forums about double buffering and none of those methods seemed to work. Then I noticed that Swing has double buffering built in so I tried that but then I get compilation errors and I'm really not sure why. My original code was a console application and worked perfectly, then I ported it into a JApplet and it still works but it flickers and thats what I'm tryign to fix now.
    The code below is in my main class under the constructor.
    Heres the double buffering code I'm trying to use, I'm sure you all seen it before lol
    public void update(Graphics g)
              // initialize buffer
              if (dbImage == null)
                   dbImage = createImage(this.getSize().width, this.getSize().height);
                   dbg = dbImage.getGraphics();
              // clear screen in background
              dbg.setColor(getBackground());
              dbg.fillRect(0, 0, this.getSize().width, this.getSize().height);
              // draw elements in background
              dbg.setColor(getForeground());
              paint(dbg);
              // draw image on the screen
              g.drawImage(dbImage, 0, 0, this);
         }My paint is right under neath and heres how it looks
    This snipet of code works but when I change the method to
    public paintComponent(Graphics g){
    super.paintComponent(g)...
    everythign stops working and get a compilation error and says that it can't find paintComponent in javax.swing.JFrame.
    public void paint(Graphics g)
              super.paint(g);
              //if game starting display menue
              if (show_menue)
                   //to restart lives if player dies
                   lives = 3;
                   menue.draw_menue(g);
                   menue_ufo1.draw_shape(g);
                   menue_ufo2.shape_color = Color.DARK_GRAY;
                   menue_ufo2.draw_shape(g);
                   menue_ufo3.shape_color = Color.BLUE;
                   menue_ufo3.draw_shape(g);
                   menue_ufo4.shape_color = new Color(82, 157, 22);
                   menue_ufo4.draw_shape(g);
                   menue_ufo5.draw_shape(g);
                   menue_ufo6.shape_color = new Color(130, 3, 3); ;
                   menue_ufo6.draw_shape(g);
                   menue_turret.draw_ship(g);
                   menue_ammo.draw_ammo(g);
              else
                   //otherwise redraw game objects
                   gunner.draw_ship(g);
                   y_ammo.draw_ammo(g);
                   grass.draw_bar(g);
                   o_ufo.draw_shape(g);
                   b_ufo.draw_shape(g);
                   m_ufo.draw_shape(g);
                   s_ufo.draw_shape(g);
                   z_ufo.draw_shape(g);
                   xx_ufo.draw_shape(g);
                   info.draw_bar(g);
                   live_painter.draw_lives(g, lives);
                   score_painter.draw_score(g, score);
                   level_display.draw_level(g, level);
                   explosion.draw_boom(g);
         }I just want to get rid of the flickering for now so any help will be greatly appreciated. Depending which will be simpler I can either try to double buffer this program or port it all to swing but I'm not sure which elements are effected by AWT and which by Swing. Also I read some of the Java documentation but couldn't really understand how to implement it to fix my program.
    Thanks in advance
    Sebastian

    This is a simple animation example quickly thrown together. I have two classes, an animation panel which is a JPanel subclass that overrides paintComponent and draws the animation, and a JApplet subclass that simply holds the animation panel in the applet's contentpane:
    SimpleAnimationPanel.java
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import javax.imageio.ImageIO;
    import javax.swing.JPanel;
    import javax.swing.Timer;
    class SimpleAnimationPanel extends JPanel
        private static final int DELAY = 20;
        public static final int X_TRANSLATION = 2;
        public static final int Y_TRANSLATION = 2;
        private Point point = new Point(5, 32);
        private BufferedImage duke = null;
        private Timer timer = new Timer(DELAY, new TimerAction());
        public SimpleAnimationPanel()
            try
                // borrow an image from sun.com
                duke = ImageIO.read(new URL(
                        "http://java.sun.com/products/plugin/images/duke.wave.med.gif"));
            catch (MalformedURLException e)
                e.printStackTrace();
            catch (IOException e)
                e.printStackTrace();
            setPreferredSize(new Dimension(600, 400));
            timer.start();
        // do our drawing here in the paintComponent override
        @Override
        protected void paintComponent(Graphics g)
            super.paintComponent(g);
            if (duke != null)
                g.drawImage(duke, point.x, point.y, this);
        private class TimerAction implements ActionListener
            @Override
            public void actionPerformed(ActionEvent e)
                int x = point.x;
                int y = point.y;
                Dimension size = SimpleAnimationPanel.this.getSize();
                if (x > size.width)
                    x = 0;
                else
                    x += X_TRANSLATION;
                if (y > size.height)
                    y = 0;
                else
                    y += Y_TRANSLATION;
                point.setLocation(new Point(x, y)); // update the point
                SimpleAnimationPanel.this.repaint();
    }AnimationApplet.java
    import java.lang.reflect.InvocationTargetException;
    import javax.swing.JApplet;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    public class AnimationApplet extends JApplet
        public void init()
            try
                SwingUtilities.invokeAndWait(new Runnable()
                    public void run()
                        // construct the panel
                        JPanel simpleAnimation = new SimpleAnimationPanel();
                        // put it in the contentPane of the JApplet
                        getContentPane().add(simpleAnimation);
                        setSize(simpleAnimation.getPreferredSize());
            catch (InterruptedException e)
                e.printStackTrace();
            catch (InvocationTargetException e)
                e.printStackTrace();
    }Here's a 3rd bonus class that shows how to put the JPanel into a stand-alone program, a JFrame. It's very similar to doing it in the JApplet:
    AnimationFrame.java
    import javax.swing.JFrame;
    public class AnimationFrame
        private static void createAndShowUI()
            JFrame frame = new JFrame("SimpleAnimationPanel");
            frame.getContentPane().add(new SimpleAnimationPanel());
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        public static void main(String[] args)
            java.awt.EventQueue.invokeLater(new Runnable()
                public void run()
                    createAndShowUI();
    }Edited by: Encephalopathic on Mar 15, 2008 11:01 PM

  • Printing JTable after turning off double buffering causing repaint problems

    I've followed all the instructions to speed up a print job in java by turning off double buffering temporarily by using the following call before calling paint() on the component...
    RepaintManager.currentManager(printTable).setDoubleBufferingEnabled(false);
    ... and then turning it back on afterwards...
    RepaintManager.currentManager(printTable).setDoubleBufferingEnabled(true);
    but the problem is that if it is a long print job, then the rest of the application (including other JTables) isn't repainting properly at all. I have the printing going on in a separate thread since I don't think it's acceptable UI practices to force the user to wait until a print job finishes before they can proceed with using their application. I've tried controlling the double buffering at the JPanel level as well, but it always affects the entire application until the print spooling is complete.
    Does anyone have any suggestions to solve this annoying SWING printing problem?
    Thanks,
    - Tony

    When you post code, make sure and put it between code
    tags, so it looks good:
    public static void main(String[] args) {
    System.out.println("Doesn't this look great?");
        public int print(Graphics g, PageFormat pf, int pageIndex) {
            System.out.println( "Calling print(g,pf,pageIndex) method" );
            int response = NO_SUCH_PAGE;
            Graphics2D g2 = (Graphics2D) g;
    // for faster printing, turn off double buffering
            disableDoubleBuffering(componentToBePrinted);
            Dimension d = componentToBePrinted.getSize(); //get size of document
            double panelWidth = d.width; //width in pixels
            double panelHeight = d.height; //height in pixels
            double pageHeight = pf.getImageableHeight(); //height of printer page
            double pageWidth = pf.getImageableWidth(); //width of printer page
            double scale = pageWidth / panelWidth;
            int totalNumPages = (int) Math.ceil(scale * panelHeight / pageHeight);
    // make sure not print empty pages
            if (pageIndex >= totalNumPages) {
                response = NO_SUCH_PAGE;
            } else {
    // shift Graphic to line up with beginning of print-imageable region
                g2.translate(pf.getImageableX(), pf.getImageableY());
    // shift Graphic to line up with beginning of next page to print
                g2.translate(0f, -pageIndex * pageHeight);
    // scale the page so the width fits...
                g2.scale(scale, scale);
                componentToBePrinted.paint(g2); //repaint the page for printing
                enableDoubleBuffering(componentToBePrinted);
                response = Printable.PAGE_EXISTS;
            return response;
        }

  • Alternative to Double-Buffered Canvas

    I am working on a program in which I use a double-buffered Canvas inside a JScrollPane. The problem is that the Canvas draws over the scrollbars. I have tried extending JComponent, JPanel, JApplet, and Component instead of Canvas, and none of them are double buffered. Here is the code I used to debug this problem:
    import java.awt.*;
    import java.awt.geom.*;
    import java.awt.image.*;
    import javax.swing.*;
    public class Test implements  Runnable
         JFrame f;
         JScrollPane scroller;
         JPanel panel;
         TestCanvas canvas;
         Thread runner;
         BufferStrategy strategy;
         public static void main (String[] args) {
              Test app = new Test();
              app.init();
         public void init() {
              f = new JFrame();
              f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              panel = new JPanel();
              canvas = new TestCanvas();
              panel.add(canvas);
              scroller = new JScrollPane(panel);
              scroller.setWheelScrollingEnabled(true);
              f.getContentPane().add(scroller);
              f.pack();
              f.setSize(300,300);
              f.setVisible(true);
              canvas.createBufferStrategy(2);
              strategy = canvas.getBufferStrategy();
              runner = new Thread(this);
              runner.run();
         public void run() {
              int x = 0;
              while(x != 65536) {
                   Graphics2D g = (Graphics2D)strategy.getDrawGraphics().create();
                   g.setColor(new Color(x%256,0,0));
                   g.fill(new Ellipse2D.Double(0,0,600,600));
                   strategy.show();
                   x++;
    }Any suggestions?

    The main culprit is that you are mixing AWT components with Swing ones.
    In addition, your are doing so many of useless things and wrong things in your code.
    Swing components are defaulted for using double-buffering.
    See: http://java.sun.com/products/jfc/tsc/articles/painting/index.html
    Try and study this code.
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.awt.image.*;
    import javax.swing.*;
    public class Fox1229{
      JFrame f;
      JScrollPane scroller;
      TestCanvas canvas;
      int x;
      Timer t;
      public static void main (String[] args) {
        Fox1229 app = new Fox1229();
        app.init();
      public void init() {
        x = 0;
        f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        canvas = new TestCanvas();
        scroller = new JScrollPane(canvas);
        scroller.setWheelScrollingEnabled(true);
        f.getContentPane().add(scroller, BorderLayout.CENTER);
        f.setSize(300, 300);
        f.setVisible(true);
        t = new Timer(50, new ActionListener(){
          public void actionPerformed(ActionEvent e){
            canvas.setOc(new Color(x % 256, 0, 0));
            canvas.repaint();
            if (++x == 1024){
              t.stop();
        t.start();
    class TestCanvas extends JPanel{
      Color oc;
      public TestCanvas (){
        oc = new Color(0, 0, 0);
      public void setOc(Color c){
        oc = c;
      public Dimension getPreferredSize(){
        return new Dimension(600, 600);
      public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        g2d.setColor(Color.blue);
        g2d.fill(new Rectangle(0, 0, 600, 600));
        g2d.setColor(oc);
        g2d.fill(new Ellipse2D.Double(0, 0, 600, 600));
    }

  • Double buffering

    I was searching through posts to find an answer to my problem of getting double buffering working without flickering when I came across this response:
    Upgrade your SDK, early 1.4 implementations had this problem on Windows2k (It's a bug). Pretty much the second buffer will point to an empty portion of video memory always, the solution to this without updating is to fill the entire backbuffer completely, flip it, fill it again, and then flip it again. You should then be able to use it normaly.
    -Jason Thomas.
    Since I am on dialup I can't really download the SDK, so could someone give me some code to do what Jason has suggested?
    Jonathan O'Brien

    No I am not recreating the bufferstrategy every frame. Overriding update didn't work either. Here is my code for main:
              GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
              GraphicsDevice device = env.getDefaultScreenDevice();
              GraphicsConfiguration gc = device.getDefaultConfiguration();
              Frame myFrame = new Frame(gc);
    BufferCapabilities bufferCaps = gc.getBufferCapabilities();
              boolean multiBuffer = bufferCaps.isMultiBufferAvailable();
              boolean fullScreen = device.isFullScreenSupported();
              System.out.println("Full screen supported = " + fullScreen);
              System.out.println("Multi buffer available = " + multiBuffer);
              System.out.println("Page flipping = " + bufferCaps.isPageFlipping());
              myFrame.setUndecorated(true);
              myFrame.setIgnoreRepaint(true);
              if ((fullScreen) && (multiBuffer))
                   device.setFullScreenWindow(myFrame);
                   device.setDisplayMode(new DisplayMode(800, 600, 16, 0));
                   rectBounds = myFrame.getBounds();
                   myFrame.createBufferStrategy(2);
                   bufferStrategy = myFrame.getBufferStrategy();
                   bufferReady = true;
              Game thisGame = new Game(args[0]);
              myFrame.add(thisGame);
    //          myFrame.getContentPane().add(thisGame);
              myFrame.show();
    And here is the relevant code for my run method:
              if (bufferReady)
                   Graphics g = bufferStrategy.getDrawGraphics();
                   if (!bufferStrategy.contentsLost()) {
                        g.fillRect(0,0,getWidth(),getHeight());
                        g.dispose();
                        bufferStrategy.show();

  • Double buffering still gives flickering graphics.

    I copied code from a tutorail which is supposed to illustrate double buffering.
    After I run it, it still flickers though.
    I use applet viewer, which is part of netbeans to run my applet.
    Link to tutorial: http://www.javacooperation.gmxhome.de/TutorialStartEng.html
    My questions are:
    Is the strategy used for double buffering correct?
    Why does it flicker?
    Why does the program change the priority a couple of times?
    Can you make fast games in JApplets or is there a better way to make games? (I think C++ is too hard)
    Here is the code:
    package ballspel;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Image;
    import javax.swing.JApplet;
    //import java.applet.*;
    * @author Somelauw
    public class BallApplet extends /*Applet*/ JApplet implements Runnable {
    private Image dbImage;
    private Graphics dbg;
    private int radius = 20;
    private int xPos = 10;
    private int yPos = 100;
    * Initialization method that will be called after the applet is loaded
    * into the browser.
    @Override
    public void init() {
    //System.out.println(this.isDoubleBuffered()); //returns false
    // Isn't there a builtin way to force double buffering?
    // TODO start asynchronous download of heavy resources
    @Override
    public void start() {
    Thread th = new Thread(this);
    th.start();
    public void run() {
    Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
    while (true) {
    xPos++;
    repaint();
    try {
    Thread.sleep(20);
    } catch (InterruptedException ex) {
    ex.printStackTrace();
    Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    @Override
    public void paint(Graphics g) {
    super.paint(g);
    //g.clear();//, yPos, WIDTH, WIDTH)
    g.setColor(Color.red);
    g.fillOval(xPos - radius, yPos - radius, 2 * radius, 2 * radius);
    @Override
    public void update(Graphics g) {
    super.update(g);
    // initialize buffer
    if (dbImage == null) {
    dbImage = createImage(this.getSize().width, this.getSize().height);
    dbg = dbImage.getGraphics();
    // clear screen in background
    dbg.setColor(getBackground());
    dbg.fillRect(0, 0, this.getSize().width, this.getSize().height);
    // draw elements in background
    dbg.setColor(getForeground());
    paint(dbg);
    // draw image on the screen
    g.drawImage(dbImage, 0, 0, this);
    // TODO overwrite start(), stop() and destroy() methods
    }

    Somelauw wrote:
    I copied code from a tutorail which is supposed to illustrate double buffering.
    After I run it, it still flickers though.
    I use applet viewer, which is part of netbeans.. AppletViewer is part of the JDK, not NetBeans.
    ..to run my applet.
    Link to tutorial: http://www.javacooperation.gmxhome.de/TutorialStartEng.html
    Did you specifically mean the code mentioned on this page?
    [http://www.javacooperation.gmxhome.de/BildschirmflackernEng.html]
    Don't expect people to go hunting around the site, looking for the code you happen to be referring to.
    As an aside, please use the code tags when posting code, code snippets, XML/HTML or input/output. The code tags help retain the formatting and indentation of the sample. To use the code tags, select the sample and click the CODE button.
    Here is the code you posted, as it appears in code tags.
    package ballspel;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Image;
    import javax.swing.JApplet;
    //import java.applet.*;
    * @author Somelauw
    public class BallApplet extends /*Applet*/ JApplet implements Runnable {
        private Image dbImage;
        private Graphics dbg;
        private int radius = 20;
        private int xPos = 10;
        private int yPos = 100;
         * Initialization method that will be called after the applet is loaded
         * into the browser.
        @Override
        public void init() {
            //System.out.println(this.isDoubleBuffered()); //returns false
            // Isn't there a builtin way to force double buffering?
            // TODO start asynchronous download of heavy resources
        @Override
        public void start() {
            Thread th = new Thread(this);
            th.start();
        public void run() {
            Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
            while (true) {
                xPos++;
                repaint();
                try {
                    Thread.sleep(20);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            //g.clear();//, yPos, WIDTH, WIDTH)
            g.setColor(Color.red);
            g.fillOval(xPos - radius, yPos - radius, 2 * radius, 2 * radius);
        @Override
        public void update(Graphics g) {
            super.update(g);
            // initialize buffer
            if (dbImage == null) {
                dbImage = createImage(this.getSize().width, this.getSize().height);
                dbg = dbImage.getGraphics();
            // clear screen in background
            dbg.setColor(getBackground());
            dbg.fillRect(0, 0, this.getSize().width, this.getSize().height);
            // draw elements in background
            dbg.setColor(getForeground());
            paint(dbg);
            // draw image on the screen
            g.drawImage(dbImage, 0, 0, this);
        // TODO overwrite start(), stop() and destroy() methods
    }Edit 1:
    - For animation code, it would be typical to use a javax.swing.Timer for triggering updates, rather than implementing Runnable (etc.)
    - Attempting to set the thread priority will throw a SecurityException, though oddly it occurs when attempting to set the Thread priority to maximum, whereas the earlier call to set the Thread priority to minimum passed without comment (exception).
    - The paint() method of that applet is not double buffered.
    - It is generally advisable to override paintComponent(Graphics) in a JPanel that is added to the top-level applet (or JFrame, or JWindow, or JDialog..) rather than the paint(Graphics) method of the top-level container itself.
    Edited by: AndrewThompson64 on Jan 22, 2010 12:47 PM

  • Double buffering && repaint

    Hi there,
    I have a frame F that contains two panels P1 and P2.
    P1 uses double buffering for drawing circles and lines.
    P2 has buttons and a JList.
    When i click on a JList to have popup menu
    or when i move the frame F on the screen
    the panel P2 lost some of JList drawing.
    Actually i iconify the frame in order to oblige
    JVM to do repaint.
    How can i resolve this problem please.

    Do not ever mix heavyweight and lightweight, or else
    you won't be able to set up the correct zorder.But when i iconfiy and desiconify my frame Java
    repaint correctly.
    I need a nice tip article of how to simulate
    desiconify repainting process.
    Thabk u

  • Double buffering circle not round anymore

    I am making an applet where some circles are painted to the screen. When not using the double buffering scenario, the shapes appear correctly.
    The problem is when i use the double-buffering technique, the circles are still there, but they look like very ugly. I would call that some "squarcles".
    What is the bug here and how to get some decent double buffering with thoses circles?

    Ok, i had some problem with the running thread when closing the applet viewer, but now this situation is corrected by setting the animation thread to null before calling stop().
    Maybe explanation of the problem is not clear, so i made two versions of the same applet with only 2 lines of code different so that there is one applet that is not double buffered.
    You can check these by yourself at this place:
    Double buffered circles: http://www.geocities.com/xeneve/cooltrail/ demo_cooltrail.htm
    No double buffer:
    http://www.geocities.com/xeneve/cooltrail/demo_cooltrail_ndb.htm
    This is just annoying to get this result. I realise that maybe not many peoples are coding applets so i guess there is few people that may have a workaround for this.

  • Double buffering circle not round

    I am making an applet where some circles are painted to the screen. When not using the double buffering scenario, the shapes appear correctly.
    The problem is when i use the double-buffering technique, the circles are still there, but they look like very ugly. I would call that some "squarcles".
    What is the bug here and how to get some decent double buffering with thoses circles?

    Here is the code so far i have that is used for painting on the screen:
    // Declaration
    private BufferedImage ecran;
    private Graphics2D buffer_ecran;
    // Instantiation
    this.ecran = new BufferedImage(getSize().width, getSize().height, BufferedImage.TYPE_INT_ARGB);
    this.buffer_ecran = ecran.createGraphics();
    // In paint() method
    Graphics be = buffer_ecran;
      // Clean the surface
    be.setColor(Color.WHITE);
    be.fillRect(0, 0, getSize().width, getSize().height);
      // Draw the circles
    be.setColor(Color.RED);
    be.drawOval(x, y, ra, rb);
      // Output the buffer to the screen
    g.drawImage(ecran, 0, 0, this);I was previously using Image and changed to BufferedImage with the hope it would resolve the situation. I can't tell a significant change in image display.

  • Double Buffering +MVC

    been trying to implement double buffering but to no avail, have read a lot of articles online about implementing double buffering which seems relitivly straight forward and code that I developed matches what they have; the only problem that I have is that it is not calling update(graphics g) to get it to repaint, but instead calls update(Observable arg0, Object arg1) which I use for my mvc implementation. I've been toiling wiht this for days and not getting anywhere with it.
    Any Ideas - on how this could be resolved??
    TIA

    i'm using swing, Then your question should be posted in the Swing forum.
    but doesn't call the update method that I have overriddenI don't know why you are overriding update(). If you want a component to repaint itself then you use the repaint() method.
    This posting, from the Swing forum, has a couple examples of animation.

  • Double buffering on large pane

    I have a large JPanel which I'm drawing onto which is about 5000 x 5000. To eliminate screen flicker when dragging objects I'm trying to use double buffering. The problem is the image is too big and I get an out of memory error message.
    I've tried using clipped rectangles to display just the size of image needed but they give erratic results or the scrolling doesn't work. I need it to display the rest of the image when scrolling. Does anyone have any suggestions on how to solve this?
    I've thought about creating the image to be just the size of the screen and to just have the objects that are meant to be at that part but I think this would involve going from device space from user space but I don't know how to do this. Thanks.
    Alan

    ok, if you want it to be interactive with scrolling, then you have to keep the image large, but unless your video card has 71.5MB free space for that image, you're not going to get good results, not to mention CPU will be hurting if you need to do any processing of the image (transforms, loads, saves, etc.)
    options:
    1. forget interaction and just get the viewable image area and paint that portion of the image
    2. Get a graphics supercomputer!
    3. try to fake the interaction somehow
    what else? dunno, did that help

  • Flickering vs double buffering

    Hello,
    flickering is a common problem and is prevented by using offscreen images. And that's what I'm doing (though, I'm not sure whether I'm doing it right). Now, there's a cycle of images displayed as an animation in my program and the flickering is really obvious while the first cycle is being displayed. It seems more or less OK when it plays further (I'm not realy sure whether it flickers or not, coz the images are being repainted rather fast).
    So, my question is: why exactly could the first cycle be displayed so slowly and how could I fix the problem? (perhaps double buffering should fix it and I'm doing it wrong?)

    Are you loading all images before showing the animations ? Because if you are loading them as you're showing the animations the loading process will slow your animation down.

  • Double Buffering Slow..is it in the code? or..

    Hi all..
    i make small application which use double buffering..
    here's the code:
    public void update(Graphics g){
            tys_a=System.currentTimeMillis();
            Dimension d = getSize();       
            if (offscreenImage == null || offscreenImage.getWidth(null) < d.width || offscreenImage.getHeight(null) < d.height){
                if (offscreenImage != null) offscreenImage.flush();
                offscreenImage = createImage(d.width, d.height);
                offscreenSize = d;
                offscreenGraphics = offscreenImage.getGraphics();
            offscreenGraphics.clearRect(0, 0, d.width, d.height);
            paint(offscreenGraphics);
            g.drawImage(offscreenImage, 0, 0, null);
            g.dispose();
            tys_b=System.currentTimeMillis();
            tys_c=tys_b-tys_a;
            System.out.println("DRAW OFFSCREEN GRAPH " + tys_c + " --- " + tys_a + " ---- " + tys_b);
        }then i run it on my desktop PC, which specs are
    Core 2 duo E4500 - 2.20Ghz, 2 Gb RAM , Vista Home Premium
    its works fine..took 10 ms
    but when i try on Sony vaio laptop, which specs are:
    core 2 duo T8100 - 2.1Gghz, 2Gb RAM, Vista home premium
    its so slow..took average about 800-900ms (80-90 times slower)
    did i do something wrong with my code...i've been searching all day...but seems no answer
    but all i can think..is not about the code..because it works fine in my desktop...
    but i dunno what cause this problem?
    any body can help?or ever have this kind of problem willing to share?
    Thx,

    AndrewThompson64 wrote:
    >
    Hi,
    dunnoIs this a English word???>Is this an English word? No it is not, it is strine* for "I do not know". I understand the Americans also know of this strine abbreviation, but I cannot understand how, since their comprehension of strine is quite low.
    * local pronunciation of 'Australian'.
    But to the OP. It is a far better idea to phrase your replies in standard English, since many people who understand English do not understand (or will not tolerate) local abbreviations and slang.In the South West of England It can be translated as "I don't know and I don't care" often accompanied by a shrug of the shoulders.

  • Strange double buffering bug

    Hi all,
    I have stumbled on strange swing behavior on Windows, most probably connected to double buffering introduced in java 6.
    Once in a while Windows stops redrawing my JFrame. From the java side everything seems ok - all the components are painted (that is, all native methods called), EventQueue normally processed by EDT, but repainted GUI is not shown on the screen. Note that OS has the repainted info - if I cover part of the application window with another window (e.g. explorer), and hid it back, the part that was covered is repainted. This happens even if I have java app halted on debug, so no other java actions can cause this repaint - OS has to have this image, it just does not put it on the screen. When I minimize/maximize the app, everything goes back to normal.
    Note that I can normally operate the app "as if" it was painted - I can change tabs, click buttons (even though I can't see them), and results of these actions are painted by java to some offscreen buffer, but are only shown when I cover/uncover my app with another window, or min/max it. Min/Maxing ends this strange state and further repaints are shown normally.
    Did any of you have this kind of problem? Any idea how to approach/resolve it or what can be the cause?
    Java is 1.6.20, I have seen the behavior on Windows XP, Vista and 2008. It is not reproducible, it just happens sometimes. I haven't seen that on Java 5. Turning off double buffering resolves that, but is not feasible due to degraded user experience.
    Thanks in advance for your help!
    Jakub

    Thanks for your help so far, perhabs this is something with the driver, but I use fairly generic windows distribution.
    EDT is not hosed, it is processing events normally (I checked that on debug step-by-step). We do not override any paint methods, and this is rather something on different level - it is not "a component not being repainted" it is "everything is repainted, but not shown on screen". Including tabbedPane's tab changes, menu display, etc. I can even see cursor changing into carret when I hover over "not shown" textfield.
    Displaying and then disposing of modal dialog also fixes the state, as do resizing of the JFrame.

Maybe you are looking for