Java:如何确定我的系统当前正在使用哪个fontconfig文件?

6
我正在尝试调试第三方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
5个回答

4

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

2

只需使用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

2

您可以使用上述选项,但是自JDK 7和8以来,JDK存在问题,无法在任何Linux操作系统中获取fontconfig文件。它默认使用操作系统中存在的libfontconfig。

以下是缺陷URL:http://bugs.java.com/view_bug.do?bug_id=7175487


1

0
尝试使用命令行工具lsof监视已打开的文件,例如:
lsof -r | grep fontconfig

1
嗨,谢谢你的建议。不幸的是,这只会在我的~/.fontconfig目录中显示二进制文件。打开这些文件确实向我展示了一些指向我/usr/share/fonts/目录中字体文件夹的路径,但并没有告诉我哪些fontconfig.properties文件被引用。 - jkndrkn
也许它没有读取任何一个文件!您可以尝试在调试器中逐步执行代码。 - vickirk
我怀疑它正在读取文件,然后立即关闭它。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接