I'm using the Java Console and System.out.println() for debugging in Firefox.
On 8/25/05, Jim Graham <[EMAIL PROTECTED]> wrote: > > public void update(Graphics g) { > > // Background: map field > > g.drawImage(backbuffer, 0, 0, this); > > > > // Foreground: headsup display > > headsup.draw(g); > > } > > > > public void paint(Graphics g) { > > update(g); > > } > > > > Now the problem is that even though the window (Firefox or > > AppletViewer) is left unresized and nothing obscures it, the > > update-method gets called repeatedly without-end, giving > > less-than-optimal performance, and a lot of flickering. > > Are you calling repaint() from anywhere other than your frame update? See one of my previous mails in this thread; I've tried removing ALL repaints() from my code without any change in behaviour. > > Note that using "this" as the last parameter of g.drawImage() can lead to > calls to repaint() since the default implementation of the ImageObserver in > Component executes a call to repaint whenever more of the image is loaded > from its source. However, this only happens for images loaded from a file > or network connection, not images created with "createImage(w, h)" or "new > BufferedImage()" (basically any image that you can render into which > eliminates backbuffers) since those images are not loaded from a source > image stream. I'm using a MediaTracker to ensure that all images has been downloaded in the init() method. > > > Even more strangely, when starting the Applet, it works fine (update() > > gets called once a second..) for a some 5-10 seconds, then the mad > > update()-calling begins. I'm under WinXP, JRE1.4.2. The continuous > > update:ing really hogs the CPU (gets up to 90%) which is not good for > > a game supposed to be run on a web page while the user listens to > > music for example. > > Have you tried it with 1.5? Or one of the pre-release builds of 1.6? I've tried 1.4.2 and 1.5.02, same behaviour. > What happens right before the trigger? You could try overriding repaint() repaint() is not getting called excessively. It is only update() that gets called all the time. I know this since I tried this: public void repaint() { System.out.println("repaint"); super.repaint(); } .. without "repaint" being printed every time "update" was printed (did the same thing for update() ) > to see where it is coming from, but it is hard to get that information back > out of the applet. You could see if the calls are going to paint() or > update() by doing something like: > > update(Graphics g) { > render(g, Color.blue); > } > > paint(Graphics g) { > render(g, Color.red); > } > > render(Graphics g, Color trackcolor) { > // the code from your current update() method > // followed by: > > g.setColor(trackcolor); > g.fillRect(0, 0, 10, 10); > } > > Depending on the color of the square in the upper left you would know if > this was the result of a call to update() (which means it came from a call > to repaint() at some point) or if it was a call directly to paint() (which > means it was handling some perceived "damage" to the window)... I am certain it is update() that is getting called excessively. Thanks for you ideas.. /Olof > > ...jim > > =========================================================================== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff JAVA2D-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".