8

以下のコードは機能しますが、実行されるたびに一時ディレクトリにフォント ファイルのコピーが残ります。これらのファイルの名前は+~JF7154903081130224445.tmpで、番号は作成されたファイルごとにランダムに見えます。

InputStream fontStream = this.getClass().getResourceAsStream("handsean.ttf");
Font baseFont = Font.createFont(Font.TRUETYPE_FONT, fontStream);
fontStream.close();

私は、sun.com のフォーラムや Web 上の他のリソースで、これが JDK のバグとして認識されている何年も前の議論を見つけました。ただし、使用しているバージョンはそれ以降のバージョン (1.6.0_13) です。

フォント関連の操作が終わってからファイルを削除して解決しようとしたのですが、その時点でファイルがロックされてしまいます。ファイルは、Web アプリケーションが停止した後にのみ削除できます。

誰にもこれに対する解決策はありますか?

4

2 に答える 2

2

ttf ファイルがアーカイブ内にない場合は、createFont(InputStream) の代わりに createFont(File) を呼び出すことができます。

私の知る限りでは、このバグは Java 6 に存在します。Font クラスのソースを調べるだけで十分です。

于 2009-11-17T22:04:39.627 に答える
1

JDK1.6.0_16 では、フォント マネージャーは一時ファイルを一種のキャッシュとして使用しているようで、必要な場合にのみフォントからグリフを読み取ります。また、JVM が正常に終了したときにファイルを削除するシャットダウン フックも追加されています。VM によっては、ファイルへのアクセスが必要なネイティブ コードにフォント レンダリングも委任される可能性があるため、ファイルをロックしておくことは理にかなっているように思えます。

サーブレット コンテナー (Web アプリケーションに言及している) が定期的に終了した場合でも、ファイルは実際に保持されますか、それともリソースを適切にクリーンアップすることを許可せずに強制終了しますか?

于 2009-11-17T21:57:37.700 に答える