Font.createFont将文件保存在临时目录中

时间:2009-11-17 20:50:17

标签: java fonts temporary-files graphics2d

下面的代码可以正常工作,但每次运行时都会将字体文件的副本留在临时目录中。这些文件名为 + ~JF7154903081130224445.tmp ,其中每个创建的文件的数字似乎是随机的。

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

我在sun.com的论坛和网络上的其他资源中发现了数年的讨论,这被认为是JDK中的一个错误,从1.5.0_06升级到1.5.0_08可以解决问题。但是,我使用的版本是更高版本(1.6.0_13)。

我尝试通过在字体相关操作完成后删除文件来解决问题,但此时文件被锁定。 只有在Web应用程序停止后才能删除这些文件。

有人有解决方案吗?

2 个答案:

答案 0 :(得分:2)

如果您的ttf文件不在存档中,您可以调用createFont(File)而不是createFont(InputStream)

据我所知,这个bug存在于Java 6中,它足以查看Font类的来源。

答案 1 :(得分:1)

使用JDK1.6.0_16时,字体管理器似乎将临时文件用作一种缓存,并且只在需要时才从字体中读取字形。它还添加了一个关闭钩子,它将在JVM通常终止时删除该文件。根据VM的不同,字体渲染也可能被委托给需要访问该文件的本机代码,因此保持对文件的锁定对我来说似乎是合理的。

文件是否实际保留,即使您的servlet容器(您提到的是Web应用程序)会定期终止,还是您在不允许它正确清理其资源的情况下将其删除?