Question

Le code ci-dessous fait son travail, mais laisse une copie du fichier de police dans le répertoire temporaire à chaque fois qu'il est exécuté. Ces fichiers sont nommés + ~ JF7154903081130224445.tmp où le nombre semble aléatoire pour chaque fichier créé.

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

J'ai trouvé années vieilles discussions dans les forums à sun.com et d'autres ressources sur le Web où cela est reconnu comme un bogue dans JDK, où la mise à niveau de 1.5.0_06 à 1.5.0_08 résoudrait le problème; Cependant, la version que je utilise une version plus récente (1.6.0_13).

J'ai essayé de résoudre le problème en supprimant les fichiers après la police les opérations liées sont terminées, mais les fichiers sont verrouillés à ce moment-là. Les fichiers ne peuvent être supprimés après l'application Web est arrêté.

Quelqu'un at-il une solution à cela?

Était-ce utile?

La solution

Si vos fichiers TTF ne sont pas dans une archive, vous pouvez appeler CreateFont (fichier) au lieu de CreateFont (InputStream)

Quant au meilleur de ma connaissance, ce bug existe en Java 6, il suffit de regarder les sources de la classe Font.

Autres conseils

Avec JDK1.6.0_16, le gestionnaire de polices semblent utiliser le fichier temporaire comme une sorte de cache et ne lit Glyphes de la police quand ils sont nécessaires. Il est également l'ajout d'un crochet d'arrêt, ce qui supprime le fichier lorsque la machine virtuelle Java se termine normalement. En fonction de la machine virtuelle, le rendu des polices est peut-être aussi déléguée à code natif qui a besoin d'accéder au fichier, donc garder un verrou sur le fichier me semble raisonnable.

Les fichiers sont effectivement conservés, même si votre conteneur de servlets (vous évoquez une application Web) se termine régulièrement, ou êtes-vous le tuer sans lui permettre de nettoyer correctement ses ressources?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top