?
Solved

java applet flickering and can't refresh ...

Posted on 2004-04-13
7
Medium Priority
?
321 Views
Last Modified: 2013-11-23
I am learning about how to write a Java Applet. The following is my first applet example from a java book. I don't understand why -
1. no matter what I change and recompile the java class code, the applet runs exactly the same as the first time that I ran this applet.
2. How to make the applet runs without flickering?
Remark: The code is no longer working but it works before. I don't know what is going on. Anyone can help me?
---------------------------------------------------------------------------------------------------
HTML file
<html><body>
<applet code="Fun.class" width=300 height=300></applet>
</body></html>
---------------------------------------------------------------------------------------------------
Fun.java
import java.applet.*;
import java.awt.*;
public class Fun extends Applet implements Runnable {
      Thread animation;
      int locx,locy; // location of rectangle
      int width, height; // dimensions of rectangle
      static final byte UP = 0; // direction of motion
      static final byte DOWN = 1;
      static final byte LEFT = 2;
      static final byte RIGHT = 3;
      byte state; // state the rect is in
      Graphics backGround;
      Image offScreen;
// length of pausing interval
      static final int REFRESH_RATE = 100; // in ms

// applet methods:
      public void init() {
            setBackground(Color.black);
            locx = 80; // parameters of center rect
            locy = 100;
            width = 110;
            height = 90;
            state = UP;
            offScreen = createImage(width, height);
            backGround = offScreen.getGraphics();
      }

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

      public void paint(Graphics g) {
            backGround.setColor(Color.black);
            backGround.fillRect(0,0,300,300);
            backGround.setColor(Color.yellow);
            backGround.fillRect(0,0,90,90);
            backGround.fillRect(250,0,40,190);
            backGround.fillRect(80,110,100,20); // hidden rectangle
            backGround.setColor(Color.blue);
            backGround.fillRect(80,200,220,90);
            backGround.fillRect(100,10,90,80);
            backGround.setColor(Color.lightGray);
            backGround.fillRect(locx,locy,width,height);
            backGround.setColor(Color.red);
            backGround.fillRect(200,0,45,45);
            backGround.fillRect(0,100,70,200);
            backGround.setColor(Color.magenta);
            backGround.fillRect(200,55,60,135);
            g.drawImage(offScreen,0,0,this);
      }
      public void update(Graphics g){
            g.clipRect(70,90,130,110);
            paint(g);
      }
// update the center rectangle
      void updateRectangle() {
            switch (state) {
                  case DOWN:
                        locy += 2;
                        if (locy >= 110) {
                              state = UP;
                        }
                        break;
                  case UP:
                        locy -= 2;
                        if (locy <= 90) {
                              state = RIGHT;
                        }
                        break;
                  case RIGHT:
                        locx += 2;
                        if (locx >= 90) {
                              state = LEFT;
                        }
                        break;
                  case LEFT:
                        locx -= 2;
                        if (locx <= 70) {
                              state = DOWN;
                        }
                        break;
            }
      }

      public void run() {
            while (true) {
                  repaint();
                  updateRectangle();
                  try {
                        Thread.sleep (REFRESH_RATE);
                  } catch (Exception exc) { };
            }
      }

      public void stop() {
            if (animation != null) {
                  animation.stop();
                  animation = null;
            }
      }

}

0
Comment
Question by:frey50
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
7 Comments
 
LVL 13

Accepted Solution

by:
Webstorm earned 320 total points
ID: 10814304
Hi frey50,

1. clear the class cache :
      open the java console
      type 'x'
      reload your html page

0
 
LVL 13

Expert Comment

by:Webstorm
ID: 10814312
2. override the repaint method:

     public void repaint()
     {
         Graphics g=getGraphics();
         if (g==null) super.repaint();
         else paint(g);
     }
0
 

Author Comment

by:frey50
ID: 10815413
I added -
      public void repaint()
     {
         Graphics g=getGraphics();
         if (g==null) super.repaint();
         else paint(g);
     }
and cleared the class loader cache, but still not working :(

0
 
LVL 92

Assisted Solution

by:objects
objects earned 320 total points
ID: 10817933
use double buffereing to remove the flicker.
ie. do you painting to an offscreen image, and then paint that image to the screen.
0
 
LVL 9

Expert Comment

by:OBCT
ID: 10818074
I recently had the same problem.
Once I uploaded the applet to a server, the problem was no more :)

It might be something to do with memory on your computer but thats a guess so you might want to double check with someone else.
0

Featured Post

Optimize your web performance

What's in the eBook?
- Full list of reasons for poor performance
- Ultimate measures to speed things up
- Primary web monitoring types
- KPIs you should be monitoring in order to increase your ROI

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
This video teaches viewers about errors in exception handling.
Suggested Courses
Course of the Month14 days, 9 hours left to enroll

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question