画像ファイルのロードの監視


今回は、アプレットなどで画像が表示される前に「Now Loading」などが書かれている時が あると思います。あの原理について説明をしてみたいと思います。まあ、そんなに時間が かかる画像を表示させることはないと思いますが…。

まず、画像のロードの監視をするために使うクラスはMediaTrackerクラスです。 どのようにして使うかというと…。

MediaTracker mediatracker = new MediaTracker(this);

とします。これでMediaTrackerクラスは使えるようになります。その後、MediaTrackerクラス に監視できるように、イメージを登録しておきます。そして、目印にIDを付けて制御を します。例えば…。

image=getImage(getDocumentBase(),"image.jpg");
mediatracker.addImage(image,0);//()の中は登録するImageクラスのオブジェクト,IDの順番

このように、IDを登録しておけば画像の監視ができるようになります。画像でなくても アニメーションのプログラミング等でも使うことができます。例えば、imageに色々な画像 を描いておいてそれを表示する際にこのMediaTrackerクラスを使って監視をしてやると できると思います。とりあえず、例として、画像読みこみテストプログラムを作ってみましょう

import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;


class rframe extends Frame
{
	Image image;
	MediaTracker mt;
	boolean flag=false;
	
	rframe()
	{
		
		mt=new MediaTracker(this);//MediaTrackerクラスの宣言
		image = createImage(800,800);
		
		image=Toolkit.getDefaultToolkit().getImage("image.jpg");//画像の読みこみ
		mt.addImage(image,0);
		try{
			mt.waitForAll();//登録した全ての画像を監視する
		}
		catch(Exception ex){}
	}

	public void paint(Graphics g)
	{
		if(mt.isErrorID(0)){
			g.drawString("Loading Error",100,100);//画像の読みこみエラー
		}
		if(!mt.checkID(0)){
			g.drawString("Loading......",100,100);//現在画像を読みこんでいる時
		}
		else
			g.drawImage(image,0,0,this);//画像の読みこみが終了したら表示
	}
}

public class tifread2
{
	public static void main(String[] args)
	{
		rframe f = new rframe();
		
		f.setTitle("画像読みこみ");
		
		f.setSize(800,800);
		
		f.addWindowListener(new WindowAdapter(){public void 
			windowClosing(WindowEvent e){System.exit(0);}});
		
		f.setVisible(true);
	}
}

実行していて気づいたかもしれませんが、これはアプリケーションでのテストです。アプレット でやりたい場合でもほとんど同じです。しかし、その場合のプログラムは自分で考えてみましょう 結局やっていることは同じですから…。



前へ
次へ
戻る