もしdestroyがよばれないならそれはJavaのバグ

http://d.hatena.ne.jp/Florian/20091213/1260705217

たぶんそのほとんどは的外れです。ただし、以下の箇所が気になりました。

ページを遷移したとか、リロードしたとかでAppletの終了を検知して終了処理をさせたいのですが、そもそも終了が検知できません。finalize()来るかなーと期待してたんだけど、それすらも来ない。おもむろにスレッド落とされます。

Java Appletってdestroyメソッドが必ず呼ばれるはずですが呼ばれないのであればバグですね。

オーディオがとまらないとしたらそれはたぶんupdate10でのVM分離が原因ではないかと思われます。destroyが呼ばれないなら何の対処も出来ないですね。


あとAudioClipは古の超初期のAPIで普通は使わないものです。音を出すならJavaSoundでしょう。やめるほうが無難です。JavaSoundではPCM生データを送ることすら出来ますのでいくらでも加工やメモリ調整が可能です。JavaSoundであってもClipはオンメモリで動作させますのでメモリ使用量を把握しにくいアプレットなどではオススメできません。BGMで扱うのは論外です。


Toolkit.createImageは使わないほうがいいですね。初期のころのAPIは各種通信やセットアップ等が終わった後から動く感じです。ナローバンド時代、少メモリ時代に作られたAPIですから、そちらのほうが都合がよいのでしょう。


ハードウェアアクセラレーションもスタンドアロンでも気軽に期待できるようなものではありません。対象となる命令は確かに増えましたし、対象になりやすいですが。どれが対象になるかなどは慎重に調べて使ってはじめて速度が確保できるのです。

埋め込みタイプはレンダリング結果をメモリに転送してそこからGDIでレンダリングしている可能性があります。JOGL見ていてもそんな感じです。GDI経由で結果を出さないといけないので大変なのでしょう。アプレット周りは詳しく調べていないのでアクセラレーション具合はわかりませんけど、期待したいなら積極的にJOGLを使うべきです。署名必要ですけど。


あと、今のアプレットJNLPXMLが指定可能です。昔は何も出来ませんでしたが。正直アプレットタグは非推奨だと思います。