Шрифт.CreateFont оставляет файлы во временном каталоге

StackOverflow https://stackoverflow.com/questions/1751673

Вопрос

Приведенный ниже код выполняет свою работу, но при каждом запуске оставляет копии файла шрифта во временном каталоге.Эти файлы имеют имена +~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).

Я попытался решить проблему, удалив файлы после завершения операций, связанных со шрифтом, но в это время файлы заблокированы.Файлы могут быть удалены только после остановки веб-приложения.

У кого-нибудь есть решение этой проблемы?

Это было полезно?

Решение

Если ваши ttf-файлы не находятся внутри архива, вы можете вызвать CreateFont(Файл) вместо CreateFont(входной поток)

Насколько мне известно, эта ошибка существует в Java 6, достаточно взглянуть на исходные тексты класса Font.

Другие советы

С JDK1.6.0_16 менеджер шрифтов, похоже, использует временный файл как своего рода кэш и будет считывать глифы из шрифта только тогда, когда они требуются.Он также добавляет перехват завершения работы, который удалит файл при обычном завершении работы JVM.В зависимости от виртуальной машины рендеринг шрифтов, возможно, также делегируется машинному коду, которому необходим доступ к файлу, поэтому сохранение блокировки файла кажется мне разумным.

Сохраняются ли файлы на самом деле, даже если ваш контейнер сервлетов (вы упоминаете веб-приложение) регулярно завершает работу, или вы уничтожаете его, не позволяя ему должным образом очищать свои ресурсы?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top