Font.createFont leaves files in temp directory

送分小仙女□ 提交于 2019-11-28 03:27:21

问题


The code below does its work but leaves 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?


回答1:


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.




回答2:


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?



来源:https://stackoverflow.com/questions/1751673/font-createfont-leaves-files-in-temp-directory

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!