Applet and Browser Refresh Hangs

Well, I once again call upon the great goodness of this forum…maybe I’ve just been doing too much Java programming lately?

Anyway…I’m stuck: I’ve created a fun little Java applet to run in a browser. It actually loads on multiple pages of a website. Only problem is, often when someone refreshes a page, the browser hangs. It happens in both IE and Mozilla.

So what else could I do? I open the Java Console to see what’s going one while the browser is hung…the page instantly loads up and I never see an error. So, I then open the console before ever loading the pages…and then it never hangs.

I’d love to just tell everyone to leave their Java console open, but I don’t think that’s going to be very realistic. Has anyone seen this before? And more importantly, has anyone found a fix for it?

Well, assuming users can refresh other pages containing Applets without causing a lockup, it is undoubtably your Applet that is the cause…
Without seeing any code its gonna be abit tough giving any further help.
Perhaps thread related - are you terminating your rendering Thread correctly (renderThread.join() in applet.stop())

Nope. I actually haven’t written a stop() method into it. I thought the superclass of JApplet would take care of it. For an emergency solution I did the only thing I know how: In the run loop for the thread, I tell it to do manual garbage collection (gc()). That’s really only a workaround, but it’s kept things stable for now.

I’ve been learning a lot of this on my own, and I’m completely new to applets, so I apologize for my lack of intelligence here. I’m worried about overriding the stop() or destroy() methods since I figured I would probably make them worse. Is this a wrong assumption? If it is, does anyone have a good example of what they should look like?

Something along the lines of this :-


Thread me; //the render Thread
boolean running = false;
//called by the browser, to indicate it wants the Applet to start.
public void start()
{
   running = true;
   me = new Thread(this); //'this' class implements the Runnable interface
   me.start(); //start the render Thread
}


public void run()
{
   //your render loop
   while(running)
   {


   }
}

//called by the browser when it wants the Applet to terminate
public void stop()
{
   running = false;
   me.join(); //wait for the render Thread to complete cleanly
}

Thank you! Do I need to call super.stop() after that? And do I have to just copy the same code block for destroy()?