开发者

Font.createFont leaves files in temp directory

The code below does its work but leav开发者_JAVA技巧es copies of the font file in the temp directory each time it is run. These files are named +~JF7154903081130224445.tmp where the number seems random for each created file.

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

I have found years-old discussions in forums at sun.com and other resources on the web where this is recognized as a bug in JDK, where upgrading from 1.5.0_06 to 1.5.0_08 would solve the problem; however, the version I am using is a later version (1.6.0_13).

I tried solving the problem by deleting the files after the font related operations are finished, but the files are locked at that time. The files can only be deleted after the web application has stopped.

Does anybody have a solution to this?


If your ttf files are not inside an archive, you can call createFont(File) instead of createFont(InputStream)

As to the best of my knowledge, this bug exists in Java 6, it is enough to look at the sources of Font class.


With JDK1.6.0_16, the font manager seem to be using the temporary file as a kind of cache and will only read glyphs from the font when they are required. It is also adding a shutdown hook, which will delete the file when the JVM terminates ordinarily. Depending on the VM, font rendering is perhaps also delegated to native code which needs access to the file, so keeping a lock on the file seems reasonable to me.

Are the files actually kept, even if your servlet container (you are mentioning a web application) terminates regularly, or are you killing it without allowing it to cleanup its resources properly?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜