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