Pack das Laden in einen eigenen Thread und lass den Hauptthread entweder direkt den Ladebalken zeichnen oder dies über die normalen AWT-Mechanismen in update/paint erledigen, so wie in diesem Beispiel:
import java.applet.*;
import java.awt.*;
import com.threed.jpct.*;
public class ExampleApplet extends Applet implements Runnable {
private Thread loopThread;
private World world=null;
private Object3D obj=null;
private FrameBuffer buffer=null;
private boolean exit=false;
private boolean loading=true;
public ExampleApplet() {}
public void init() {
getAppletContext().showStatus("Initializing...");
buffer=new FrameBuffer(480, 300, FrameBuffer.SAMPLINGMODE_NORMAL);
buffer.enableRenderer(IRenderer.RENDERER_SOFTWARE, IRenderer.MODE_OPENGL);
world=new World();
world.setAmbientLight(200,200,200);
obj=Primitives.getCube(3);
world.addObject(obj);
world.buildAllObjects();
world.getCamera().setPosition(new SimpleVector(0,0,-30));
getAppletContext().showStatus("Done !");
}
public void destroy() {
TextureManager.getInstance().flush();
Object3D.resetNextID();
world.removeAll();
exit=true;
super.destroy();
}
public void paint(Graphics g) {
}
public void update(Graphics g) {
if (loading) {
paintLoadingStuff(g);
}
}
public String getAppletInfo() {
return ("Example Applet ");
}
public void run() {
if (Thread.currentThread() == loopThread) {
mainLoop();
}
}
public void start() {
if (loopThread==null) {
loopThread = new Thread(this);
loopThread.start();
}
}
private void paintLoadingStuff(Graphics g) {
// Do some loading bar or whatever here
g.clearRect(0, 0, getWidth(), getHeight());
g.drawString( (int) (Math.random() * 100) + "% finished", 10, 30);
}
private void loadStuff() {
try {
// Simulate loading by waiting 5 secs...
Thread.sleep(5000);
} catch(Exception e) {
e.printStackTrace();
}
loading=false;
}
private void mainLoop() {
Thread.currentThread().setPriority(Thread.NORM_PRIORITY);
new Thread() {
public void run() {
loadStuff();
}
}.start();
try {
while (loading) {
repaint();
Thread.sleep(50);
}
} catch(Exception e) {e.printStackTrace();}
while (!exit) {
buffer.clear();
obj.rotateX(0.01f);
obj.rotateY(-0.01f);
world.renderScene(buffer);
world.draw(buffer);
buffer.update();
buffer.display(this.getGraphics());
Thread.yield();
}
loopThread=null;
}
}