В моей системе мне нужно зарегистрировать два внешних файла шрифтов .TTF:
HamletOrNot.ttf (74 KB)
MorrisRoman-Black.ttf (67 KB)
Перед созданием объектов Font() я записываю с помощью следующих команд:
/* Set full path of font */
String path = filesPath + fileName;
/* Read file */
Resource resource = applicationContext.getResource( path );
File fontFile = resource.getFile();
/* Load font */
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, fontFile ));
Затем я создаю объекты (я создаю более одного шрифта (), потому что форматирование отличается):
Font font = new Font( "HamletOrNot" , Font.TRUETYPE_FONT , 10 );
Font font = new Font( "HamletOrNot" , Font.TRUETYPE_FONT , 12 );
Font font = new Font( "MorrisRoman-Black" , Font.TRUETYPE_FONT , 20 );
Font font = new Font( "MorrisRoman-Black" , Font.TRUETYPE_FONT , 22 );
Хорошо, система работает нормально. Проблема в том, что после запуска файлы .TTF меняют размер (до 83 КБ и 80 КБ), таким образом:
HamletOrNot.ttf (83 KB)
MorrisRoman-Black.ttf (80 KB)
Затем, когда я запускаю систему во второй раз, возникает следующая ошибка:
...
Caused by: java.awt.FontFormatException: bad table, tag=1280594760
at sun.font.TrueTypeFont.init(TrueTypeFont.java:513)
at sun.font.TrueTypeFont.<init>(TrueTypeFont.java:162)
at sun.font.FontManager.createFont2D(FontManager.java:2474)
at java.awt.Font.<init>(Font.java:570)
at java.awt.Font.createFont(Font.java:980)
at br.com.linu.vectortown.base.screen.font.GameFontFactory.postConstruct(GameFontFactory.java:43)
at br.com.linu.vectortown.base.screen.font.GameFontContainer.postConstruct(GameFontContainer.java:27)
at br.com.linu.vectortown.client.looping.util.AutomaticInjector.postConstruct(AutomaticInjector.java:47)
... 99 more
Если заменить файлы .TTF с измененным размером (83 КБ и 80 КБ) на оригинальные (74 КБ и 67 КБ), программа работает нормально.
Что я делаю неправильно? Я думал, что мне придется закрывать открытые файлы с помощью applicationContext.getResource(), но не знаю, как это сделать. Я не знаю, как это решить.
Примечание. Я получаю applicationContext of the Spring. Исходные файлы TTF (с правильными размерами) находятся в папке ресурсов проекта, а плохие файлы TTF — в целевой папке ресурсов (сборка выполняется с помощью Maven).
Помоги мне...
РЕДАКТИРОВАТЬ:
Я подозреваю, что maven повреждает файлы. Почему? Я использую Eclipse с плагином Maven. Всякий раз, когда я выполняю развертывание или нажимаю F5, чтобы обновить проект, файлы .TTF из целевой папки повреждаются.
Кто-нибудь видел поврежденные файлы ресурсов maven?
Спасибо