Java: Как узнать, какой файл fontconfig использует моя система в настоящее время?

Я пытаюсь отладить проблему, связанную со шрифтами, в стороннем Java-приложении. В частности, ChemAxon JChem. Я консультировался с этим руководством: http://java.sun.com/j2se/1.5.0/docs/guide/intl/fontconfig.html

Частично проблема заключается в том, что я не уверен, на какой файл fontconfig.properties.src ссылается моя установка Java.

Вот мои файлы fontconfig:

$ ls fontconfig*src 
fontconfig.Fedora.properties.src  fontconfig.properties.src   
fontconfig.SuSE.properties.src  fontconfig.Ubuntu.properties.src

Моя система - система CentOS, поэтому я полагаю, что она по умолчанию fontconfig.properties.src файл или fontconfig.Fedora.properties.src файл, поскольку CentOS и Fedora являются производными от Red Hat.

Итак, могу ли я сказать, какой fontconfig файл моей системы используется?

Спасибо,

Джон Дэвид

5 ответов

Класс JRE sun.awt.FontConfiguration уже имеет протоколирование для этого, вам просто нужно включить его.

  • Добавить эту опцию в Java -Dsun.java2d.debugfonts=true
  • Отредактируйте jre/lib/logging.properties

Изменить эту строку

java.util.logging.ConsoleHandler.level = ALL

Добавить эту строку

sun.awt.FontConfiguration.level = ALL

И тогда вы увидите такую ​​строку в вашем stderr (logger использует stderr по некоторым причинам)

CONFIG: Read logical font configuration from /your/path/jre/lib/fontconfig.RedHat.6.bfc

Просто используйте strace, чтобы проверить, какой из этих файлов успешно открыт:

$ strace -f -e open java ... 2>&1 | grep fontconfig
[pid  3321] open("/usr/java/jdk1.7.0_55/jre/lib/fontconfig.RedHat.6.bfc", O_RDONLY|O_LARGEFILE) = 115

Если это не говорит вам, какой файл он использует, скорее всего, вместо этого он использует общесистемный fonctconfig. Вы получите вывод, начинающийся следующим образом:

[pid  3259] open("/usr/java/jdk1.7.0_55/jre/lib/i386/xawt/libfontconfig.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  3259] open("/usr/java/jdk1.7.0_55/jre/lib/i386/xawt/../libfontconfig.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  3259] open("/usr/java/jdk1.7.0_55/bin/../lib/i386/jli/libfontconfig.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid  3259] open("/usr/lib/libfontconfig.so.1", O_RDONLY) = 116

Вы можете использовать вышеупомянутые опции, но в JDK 7 и 8 есть проблема с JDK, файл fontconfig не выбирается ни для одной операционной системы Linux. По умолчанию это libfontconfig, который присутствует в ОС.

Вот URL-адрес дефекта http://bugs.java.com/view_bug.do?bug_id=7175487

Он никогда не будет смотреть на файлы X.properties.src - они по сути там, чтобы рассказать вам, каково содержимое соответствующего X.bfc. Здесь описан точный порядок проверки файлов:

http://docs.oracle.com/javase/1.5.0/docs/guide/intl/fontconfig.html

Попробуйте отслеживать файлы, которые открываются, используя инструмент командной строки lsof, например

lsof -r | grep fontconfig
Другие вопросы по тегам