- - PR -
PHPで上書きした画像ファイルをJAVAアプレットに表示させたい。
| 投稿者 | 投稿内容 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-28 05:09
こんにちは、さくらばです。
Web を紹介してもらったので... というわけではないのですが
解決したということでどうでもいいかもしれませんが、個人的に腑に落ちなかったので ちょっと調べてみました。 結局、Toolkit が static なキャッシュを持っているので、Applet が destroy しても キャッシュが残ってしまいます。 Toolkit のコンクリートクラスの SunToolkit では getImage は次のようになっています。
SoftCache は SoftReference を使用したマップになっています。 このコードからキャッシュになければ生成し、キャッシュにあればそれを利用していることが分かります。 同様なことは Applet#getImage にもあります。Applet がイメージのキャッシュをしているのではなく Applet のコンテナである AppletContext がキャッシュをしているということが分かります。 以下は AppletViewer のコードですが Java Plug-in でも同じようなコードになっています。 Applet の getImage は AppletContext の getImage をコールしているだけになっています。 AppletContext はインタフェースなので、それを実装している AppletViewer の getImage を見てみると次のようになっています。
static なマップにイメージをキャッシュしており、getImage はキャッシュから持ってきている ことが分かります。 これに対して ImageIO では単純に毎回 URL#openStream から InputStream を生成して、読み込み を行っています。 ImageIO が使えればいいのですが、使えない場合は Toolkit#getImage の代わりに Toolkit#createImage を使うようにすればいいようです。
| ||||||||||||||||
|
投稿日時: 2004-04-28 11:07
さくらばさん、ありがとうございました。 getImageとキャッシュの関係がよく分かり、今後はcreateImageとの 使い分けがうまく出来そうです これからもよろしくお願いいたします。 | ||||||||||||||||
