Pergunta

O código abaixo faz seu trabalho, mas deixa cópias do arquivo de fonte no diretório temporário cada vez que for executado. Esses arquivos são nomeados +~ JF7154903081130224445.TMP onde o número parece aleatório para cada arquivo criado.

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

Encontrei discussões de anos em fóruns no Sun.com e em outros recursos na web, onde isso é reconhecido como um bug no JDK, onde a atualização de 1.5.0_06 para 1.5.0_08 resolveria o problema; No entanto, a versão que estou usando é uma versão posterior (1.6.0_13).

Tentei resolver o problema excluindo os arquivos após o término das operações relacionadas à fonte, mas os arquivos estão bloqueados naquele momento. Os arquivos só podem ser excluídos depois que o aplicativo da Web foi interrompido.

Alguém tem uma solução para isso?

Foi útil?

Solução

Se seus arquivos TTF não estiverem dentro de um arquivo, você poderá ligar para o createfont (arquivo) em vez de createfont (InputStream)

Quanto ao melhor do meu conhecimento, esse bug existe no Java 6, basta olhar para as fontes da classe de fontes.

Outras dicas

Com o JDK1.6.0_16, o gerente da fonte parece estar usando o arquivo temporário como uma espécie de cache e só lerá os glifos da fonte quando forem necessários. Ele também está adicionando um gancho de desligamento, que excluirá o arquivo quando a JVM terminar normalmente. Dependendo da VM, a renderização da fonte talvez também seja delegada ao código nativo, que precisa de acesso ao arquivo, portanto, manter um bloqueio no arquivo parece razoável para mim.

Os arquivos são realmente mantidos, mesmo que o seu contêiner de servlet (você esteja mencionando um aplicativo da Web) termine regularmente ou você o está matando sem permitir que ele limpe seus recursos corretamente?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top