Javaチュートリアルからの引用:
Java Plug-in ソフトウェアは、Java アプレットごとにワーカー スレッドを作成します。
マルチスレッド環境では、共有リソースに細心の注意を払う必要があります。最善かつ最も簡単な方法は、何も共有しないことです (最適なスケーリングとデッドロックの可能性はありません)。
「init」メソッドで毎回ハンドラーを初期化すると思います。そうであれば、1 つの静的共有ロガーを使用する必要があります (このリンクを確認してください)。状況を少し改善するのに役立ちますが、アプレットで複数のブラウザを起動すると、新しいログ ファイルが作成されます。この回避策は、Oracle では推奨されておらず、下位互換性のために保持されています。
推奨される簡単に実装できるソリューション - 「各アプレットには独自のロガーがあり、独自のファイルに書き込む必要があります」。ログ ファイル名生成のコード:
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
private String generateFileName() {
return String.format("applets-log/%s-%s.log", dateFormat.format(new Date()), UUID.randomUUID());
}
また、アプレット開発のベスト プラクティス.
あなたのマイナーな質問への回答 (変更済み):
Java プラグインのこの古いバグに関する議論によると、アプレットはクリーンアップのための事前定義された間隔でいつでも終了する可能性があります。そのため、「停止」または「破棄」メソッドにリソース クリーンアップ コードを配置する必要がありますが、そのコードが実行される内容に依存するべきではありません。
アプレットのライフサイクルはブラウザによって制御され、ホストしているドキュメントがブラウザによって破棄されたときに実行する機能をアプレットに与えるべきではありません。
6u10 以降、古いプラグインと新しいプラグインの両方が、アプレットを停止するための一定時間 (古いプラグインでは 1000 ミリ秒、新しいプラグインでは 200 ミリ秒) 後にアプレットのシャットダウンを強制します。