我正在尝试在第三方Java应用程序中调试与字体相关的问题。具体来说,ChemAxon JChem。我一直在咨询这个指南: http://java.sun.com/j2se/1.5.0/docs/guide/intl/fontconfig.html
部分问题是,我不确定我的Java设置当前引用了哪个fontconfig.properties.src文件。
以下是我的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
文件?
谢谢,
-John David
答案 0 :(得分:2)
您可以使用上述选项,但从JDK 7和8开始,JDK存在问题,不会为任何Linux操作系统选择fontconfig文件。它默认为操作系统中存在的libfontconfig。
答案 1 :(得分:1)
它永远不会查看X.properties.src文件 - 那些基本上是告诉你匹配的X.bfc的内容是什么。这描述了检查文件的确切顺序:
http://docs.oracle.com/javase/1.5.0/docs/guide/intl/fontconfig.html#loading
答案 2 :(得分:1)
只需使用 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
答案 3 :(得分:1)
JRE类sun.awt.FontConfiguration已经为此进行了日志记录,您只需启用它即可。
-Dsun.java2d.debugfonts=true
更改此行
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
答案 4 :(得分:0)
尝试使用命令行工具lsof监视打开的文件,例如
lsof -r | grep fontconfig