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

下面的代码完成了它的工作,但每次运行时都会在temp目录中保留字体文件的副本。 这些文件名为+ ~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应用程序停止后才能删除这些文件。

有人有解决方案吗?

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

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

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

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