2015-04-01 3 views
0

В папке с именем данные, у меня есть файл шрифта font.ttf.Java: Шрифт не загружается (из внешнего файла)

Я хочу, чтобы прочитать его, как это:

try { 
    Font f = Font.createFont(Font.TRUETYPE_FONT, 
     new File("data/font.ttf")).deriveFont(12.0); 
} catch (IOException | FontFormatException e) { 
    System.err.println(e.toString()); 
} 

Это работало отлично до того момента, я удалил тот же шрифт из системы(он все еще в папке данных!). Теперь он просто показывает общий шрифт Look and Feel.

Можно ли даже читать шрифт из файла, не находящегося в папке «Системные шрифты»?

+0

Этот код не компилируется. Измените свой вопрос, чтобы показать свой фактический код, в том числе блок catch, который обрабатывает IOException и FontFormatException. – VGR

+0

ОК, добавлен блок catch. – lukulus

+0

И действительно ли происходит исключение? Я предлагаю вам заменить этот println на 'throw new RuntimeException (e);'. Если вы действительно не хотите, чтобы ваше приложение запускалось без загрузки вашего шрифта. – VGR

ответ

0

После того, как вы его загрузили, вы ничего не делаете с этим Font f, поэтому вы можете просто потерять его из-за блокировки блока.

Font fallback = load some system default; 
Font myfont = null; 

... 

try { 
    File ffile = new File("data/font.ttf"); 
    myfont = Font.createFont(Font.TRUETYPE_FONT, ffile).deriveFont(12); 
} catch (FontFormatException ffe) { 
    System.out.println("Tried to load a bad font..."); 
    ffe.printStackTrace(); 
} catch (IOException ioe) { 
    System.out.println("I have no idea what went wrong"); 
    ioe.printStackTrace(); 
} finally { 
    loadMyApplication(myfont == null ? fallback : myfont); 
} 

Или, если вы абсолютно необходимо, что шрифт для правильного здания UI или рендеринга контента, вызовите loadMyApplication в try блоке, так что любые уловы предотвратить приложение от нагрузки.

Смежные вопросы