Java: Как узнать, какой файл fontconfig использует моя система в настоящее время? - PullRequest
4 голосов
/ 06 апреля 2010

Я пытаюсь отладить проблему со шрифтом в стороннем 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 ]

2 голосов
/ 26 апреля 2016

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

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

2 голосов
/ 04 февраля 2016

Класс 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 (регистратор использует stderr по некоторым причинам)

CONFIG: Read logical font configuration from /your/path/jre/lib/fontconfig.RedHat.6.bfc
1 голос
/ 01 февраля 2012

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

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

1 голос
/ 04 сентября 2014

Просто используйте 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
0 голосов
/ 06 апреля 2010

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

lsof -r | grep fontconfig
...