//
// CHAPTER 21
// Class Source Name [AnimatorApplet.java]
//
// Package name [userClass]
// 1996.3
// Author [ Junzo hagimoto ]
package userClass;
import java.applet.*;
import java.awt.*;
import java.net.URL;
//---------------------------------------------------------------------
// アニメーションアプレットの基本動作クラス
//---------------------------------------------------------------------
abstract public class AnimatorApplet extends Applet implements Runnable {
Thread kicker = null;
MediaTracker mt = null;
Image offs;
Graphics grf;
int sleepTimer = 20;
//
// サブクラスから継承を禁止するメソッド
//
public final void init() {
mt = new MediaTracker(this);
initAnimator();
Dimension d = size();
offs = createImage( d.width, d.height);
grf = offs.getGraphics();
}
public final void run() {
Thread.currentThread().setPriority(Thread.NORM_PRIORITY-3);
try{
mt.waitForID(0);
} catch( InterruptedException e){
System.out.println("Wait Error");
return;
}
runLoop();
kicker=null;
}
public final void update(Graphics g) {
paint(g);
}
public final void paint(Graphics g) {
if(mt.isErrorID(0) ){
loadErrorMessage(g,"Image Load Error.......",50,20);
return;
}
if(! mt.checkID(0) ){
Dimension d = size();
loadingMessage(g,"Loading.......",d.width/2 - 30,20);
return;
}
paintAnimator(grf);
g.drawImage(offs, 0, 0, this);
}
public final void start() {
if (kicker == null) {
startAnimator();
kicker = new Thread(this);
kicker.start();
}
}
public final void stop() {
if (kicker != null) {
stopAnimator();
kicker.stop();
kicker = null;
}
}
public final Image getImage(URL url,String name){
Image image;
image = super.getImage( url, name);
mt.addImage(image,0);
return image;
}
//
// サブクラスから継承可能なメソッド
//
protected void loadErrorMessage(Graphics g,String message,int x,int y){
g.drawString(message,x, y);
}
protected void loadingMessage(Graphics g,String message,int x,int y){
g.drawString(message,x, y);
}
protected void setSleepTimer(int timer){
sleepTimer = timer;
}
protected void runLoop(){
while (kicker != null) {
repaint();
try {
Thread.sleep( sleepTimer );
} catch (InterruptedException e) {}
}
}
protected void startAnimator(){}
protected void stopAnimator() {}
//
// サブクラスで継承して実装すべきメソッド
//
protected abstract void initAnimator() ;
protected abstract void paintAnimator(Graphics g) ;
}
//