2010-11-23 9 views
2

JavaイメージAPIは非同期ロードを想定しています。画像が完全に読み込まれると、さまざまな方法でImageObserverがパラメータとして取得されます。イメージがJavaで完全にロードされるまでの待機方法

一方、一部のタイプの画像(BufferedImagesなど)はImageObserverを使用せず、決してそれを呼び出すことはありません。

画像が完全に読み込まれるまで、どのようにコードが見えるのでしょうか?

私はそれが戻ったときにイメージが完全にロードされていることを保証

public void waitUntilLoaded(Image img){ 
    ... 
} 

ようなメソッドを持っているしたいと思います。

答えて

4

良いオプションはjava.awt.MediaTrackerです。良いコード例in the API documentationがあります。要するに、MediaTrackerオブジェクトを作成してコンポーネントの画像を追跡し、どの画像を追跡するかを指定してから、tracker.waitForID(n)を呼び出して、指定した画像のロードが完了するまでブロックします。

明らかに、これをイベントスレッドから外しておく必要がありますが、それは分かっています。 :)

+1

私はコンポーネントを持っていないので、これは役に立たないようです。 –

1

javax.imageio.event.IIOReadProgressListenerを使用し、ImageObserverの代わりにimageCompleteメソッドをオーバーライドします。

javax.imageio.ImageReaderを実際に読み取るコード(ImageIOの静的メソッドの1つを使用して作成)を変更することができます。

+0

私はそれを使用できるとは思わない。私は未知のソースからImageを取得し、私の仕事を開始する前にそれが完了していることを確認する必要があります –

0

もう一つの選択肢は、img.getWidth()が-1と異なる値を返すまで待つことです。 Threadswhileループを使用すると、これをよりきれいな方法で行うことができます。

関連する問題